[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Constant visibility

Nicholas Wieland

12/30/2008 11:21:00 PM

Hi *,

module Included

def whatever
do_something_with FOO
end

end

module Includer

include Included

class Whatever
FOO = 'whatever'
end

end

this is not just an example to invent stupid variable names, but a
question.
I would like to include the Included module and have visibility on the
Includer module constants (think about validation, different classes
need different data).
Can you suggest me a way to accomplish that, to have a method inside a
module that checks data inside a class in another module, and define
the rules in the class itself ?
"You're an idiot you should do like that" answers are welcome :)

ngw

--
http://www....


2 Answers

Sean O'Halpin

12/31/2008 12:30:00 AM

0

On Tue, Dec 30, 2008 at 11:20 PM, Nicholas Wieland
<nicholas.wieland@gmail.com> wrote:
> Hi *,

[snip example code]

> Can you suggest me a way to accomplish that, to have a method inside a
> module that checks data inside a class in another module, and define the
> rules in the class itself ?

This is one approach:

module Included
def whatever
puts self.class::FOO
end
end

module Includer
class Whatever
include Included
FOO = 'whatever'
end
end

o = Includer::Whatever.new
o.whatever # => "whatever"

Note you have to include the module inside the class - including it in
the enclosing module does not do what you may think :)

Regards,
Sean

bermonruf

1/1/2009 7:21:00 AM

0

[Note: parts of this message were removed to make it a legal post.]

You might be looking for extend instead of include:

> module Foo
>

>
def foo
>
puts self::FooBar::TEST;
>
end
>

>
end
>

> module Bar
>

>
extend Foo;
>

>
class FooBar
>
TEST = "Whatever";
>
end
>

> end
>

> Bar.foo; # Prints out "Whatever"
>

See if it works for you

On Tue, Dec 30, 2008 at 10:30 PM, Sean O'Halpin <sean.ohalpin@gmail.com>wrote:

> On Tue, Dec 30, 2008 at 11:20 PM, Nicholas Wieland
> <nicholas.wieland@gmail.com> wrote:
> > Hi *,
>
> [snip example code]
>
> > Can you suggest me a way to accomplish that, to have a method inside a
> > module that checks data inside a class in another module, and define the
> > rules in the class itself ?
>
> This is one approach:
>
> module Included
> def whatever
> puts self.class::FOO
> end
> end
>
> module Includer
> class Whatever
> include Included
> FOO = 'whatever'
> end
> end
>
> o = Includer::Whatever.new
> o.whatever # => "whatever"
>
> Note you have to include the module inside the class - including it in
> the enclosing module does not do what you may think :)
>
> Regards,
> Sean
>
>

--
Bernardo Rufino