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-forum.com/.
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