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
on 2007-05-18 19:23
on 2007-05-18 20:13
Peer Allan wrote: > def method(option) > 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.