Constants Question

P

Peer Allan

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
 
J

Joel VanderWerf

Peer said:
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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,259
Messages
2,571,295
Members
47,931
Latest member
alibsskamoSeAve

Latest Threads

Top