Ross Bamford wrote: > On Mon, 2006-03-20 at 15:58 +0900, Mike Austin wrote: >> I have certain variables that are 'properties' and I keep track of them in a >> class instance variable called @fields, and each subclass may have it's own >> fields. I want to navigate through the hierarchy and go through each list, is >> something like this possible?: >> >> class View >> @fields = [:origin] >> def View.fields() >> super.fields() >> @fields >> end >> attr :origin >> end >> >> class Button < View >> @fields = [:caption] >> attr :caption >> end >> >> View.fields() actually finds :cation when I do Button.fields(), but super does >> not work. Or maybe there is another way to do this? >> > > It seems to work if you replace View.fields with: > > def View.fields > @fields + (superclass.respond_to?(:fields) ? superclass.fields : []) > end > > But this seems like a bit of a strange setup to me... Thanks, that works. It is strange, but it's the best way I see to classify instance variables as being 'public properties' or not. Here's an example of how it will be used: class View @fields = [:origin, :extent] [...] def View.fields() @fields + (superclass != Object ? superclass.fields : []) end def View.inherited( subclass ) subclass.class_eval do @fields = [] # Make subclasses have @fields end end end class Button < View @fields = [:action] [...] end puts Button.fields Have a good one, Mike