Clint
3/20/2006 8:19:00 PM
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