Nathaniel Talbott wrote: ... > The core of the problem that class local instance variables > are trying to solve is variable shadowing (as Guy so > elegantly showed). The problem with making all variables > class local and using accessors, is that if I am shadowing an > instance variable, there is a good chance that I will shadow > the accessor as well. The superclass variable thus becomes > completely inaccessible: > > # pretend all instance variables are class local > class A > attr_accessor :a > > def initialize > @a = 1 > end > end > > class B < A > attr_accessor :a > > def initialize > @a = 'a' > end > end > > There is no way for the subclass to access the superclass's > instance variable @a now, and I don't see a good work-around for this. You can make the same argument in any situation like class A def meth ... end end class B < A def meth .. End end Now there is no way that B-objects can access A#meth. Generally I am not too bother by this behavior* however I'd be willing to use your argument as an argument against "singleton class" localness:-) /Christoph * Okay, actually it makes me wander why I should worry about instance variables name clashes but should continue to live method name clashes?