From: Stefano Crocco Date: 2007-08-15T04:20:08+09:00 Subject: Re: attr_* position in a class and their results Alle marted狸 14 agosto 2007, Arno J. ha scritto: > Hello, > I was playing with instance variables when I made up those two classes : > > class Vartest_before > def init > @instance_variable = "I belong to the instance" > end > > attr_accessor :instance_variable > > def instance_variable > @instance_variable = "Forced" > end > end > > class Vartest_after > def init > @instance_variable = "I belong to the instance" > end > > def instance_variable > @instance_variable = "Forced" > end > > attr_accessor :instance_variable > end > > Now when using them, here are the results (# =>) : > > a = Vartest_after.new > a.init > b = Vartest_before.new > b.init > > puts a.instance_variable # => I belong to the instance > a.instance_variable = "Changed" > puts a.instance_variable # => Changed > > puts b.instance_variable # => Forced > b.instance_variable = "Changed" > puts b.instance_variable # => Forced > > > I don't understand what's happening :/ Can you ? In the case of Vartest_before, when you call puts b.instance_variable the value of @instance_variable is changed to 'Forced' before being returned. If you substitute that line with puts b.instance_variable_get(:@instance_variable) you'd get what (I think) you expect, that is 'Changed'. This doesn't happen for the other class because there your definition of instance_variable is overwritten by the one provided by attr_accessor. I hope this helps Stefano