From: Joel VanderWerf Date: 2007-05-19T03:12:37+09:00 Subject: Re: Constants Question 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