[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Constants Question

Peer Allan

5/18/2007 5:24:00 PM

Hi,

I have building a small custom library and I want to be able to define a
constant in each subclass identifying "valid" options. Each subclass
will have its own list.

here is how I tried to do it, please ignore the literal values, this is
just an example:

class Base
def method(option)
raise MyException unless VALID.include?(option)
do_with_option(option)
end
end

class SubClassA < Base
VALID = ['color','size','weight']
end

class SubClass < Base
VALID = ['name','phone','email']
end

sub = SubClass.new
sub.option('phone')

This results in a "uninitialized constant VALID" error. Why is that?
It is like the VALID constant is not being recognized in the subclass.

I would appreciate any direction on how to best handle what I am looking
to do.

Thanks

Peer

--
Posted via http://www.ruby-....

1 Answer

Joel VanderWerf

5/18/2007 6:13:00 PM

0

Peer Allan wrote:
> Hi,
>
> I have building a small custom library and I want to be able to define a
> constant in each subclass identifying "valid" options. Each subclass
> will have its own list.
>
> here is how I tried to do it, please ignore the literal values, this is
> just an example:
>
> class Base
> def method(option)
> raise MyException unless VALID.include?(option)
> do_with_option(option)
> end
> end
>
> class SubClassA < Base
> VALID = ['color','size','weight']
> end
>
> class SubClass < Base
> VALID = ['name','phone','email']
> end
>
> sub = SubClass.new
> sub.option('phone')
>
> This results in a "uninitialized constant VALID" error. Why is that?
> It is like the VALID constant is not being recognized in the subclass.

Constants are statically scoped, so it really is unrecgnize in the
context of Base.

Use this instead of VALID:

self.class::VALID

this forces dynamic lookup, and it will be found in the appropriate
subclass.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407