On May 19, 2007, at 10:46 AM, Sven Suska wrote:

> ara.t.howard schrieb:
>
>> class Class
>>   def fattr a, &b
>>     define_method(a){ instance_eval &b }
>>   end
>> end
>>
>> class C
>>   fattr(:a){ 40 }
>>   fattr(:b){ a + 2 }
>> end
>> c = C.new
>> p c.b   # => 42
>> with this approach there is simply no variable to modify - it  
>> exists  only through closure.
>
> But a method to modify:
> class C
>  fattr(:b){ 17 }
> end
> p c.b  # => 17
>
> Or did I get something wrong?
>
> Sven
>

yes of course.  and we also have 'remove_const :C' which allows us to  
replace the class wholesale, and this line of reasoning extends all  
the way up in ruby.  still - my approach does, in fact, prevent  
modifying instance vars; the fact that the class itself can stiff be  
modified (by adding methods) may or may not be an issue.  perhaps  
enclosed attributes and C.freeze and (class << C;self;end).freeze  
would be sufficient.

-a
--
we can deny everything, except that we have the possibility of being  
better. simply reflect on that.
h.h. the 14th dalai lama