From: eliben@... Date: 2006-03-12T02:23:43+09:00 Subject: Re: attribute setters for instance variables Hans Fugal wrote: > eliben@gmail.com wrote: > > Hello, > > > > The Pickaxe book presents the following example: > > > > class Incorrect > > attr_accessor :one, :two > > def initialize > > one = 1 > > self.two = 2 > > end > > end > > > > obj = Incorrect.new > > > > p obj.one > > p obj.two > > > > The first thing printed is 'nil' and not '1' since "one = 1" assigns to > > a local variable of method initialize instead of the instance variable. > > So far it's clear. > > Now, they propose a solution: to use self.one instead of just one. > > Won't be using @one simpler and also correct ? What am I missing ? > > > > Thanks > > > > @one = 1 is setting the instance variable itself, and that's fine for > accessors. If you want to do something special on =() then you will want > to use the self.one style. e.g. > > def Foo > def one=(n) > @one = n+42 > end > def initialize(n) > self.one = 0 # @one == 42 > @one = 0 # @one == 0 > end > end Thanks for your swift and insightful reply.