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