From: HiddenBek Date: 2007-12-01T00:15:02+09:00 Subject: Re: problem with 'self'. behaves different on setting and gettin Here's a small example to illustrate Jari's point: class User attr_accessor :x def foo self.x = 1 puts x # => 1 x = 2 puts x # => 2 puts self.x # => 1 end end User.new.foo Any assignment without an explicit receiver will set a local variable. You also need to use self if the method you're calling is shadowed by a local variable with the same name, as in my example above. Finally, you must use self if the method you're calling is a reserved word, such as self.class. Page 86 of the Pickaxe book (Programming Ruby) talks about this. On Nov 30, 10:33 am, Jari Williamsson wrote: > Michal Gabrukiewicz wrote: > > so my 1st question is: why doesnt the 'set_foo' method calls the 'x' > > method if i remove the self? > > Because it now thinks that x is a local variable. This is one of the > basics of Ruby. > > If you use NetBeans, the editor will alert you about these kind of > things in the colored syntax. > > > THE INTERESTING THING: 'get_foo' works with 'x' and 'self.x' > > Yes, but with different result behind the scenes. 'x' is the same as > 'x()', while 'self.x' is the same a '@x' > > > and the 2nd question: when should i use self now and when not and why is > > there this strange behavoir? > > You should use self when a left-side argument can be interpreted as a > local variable. > > Best regards, > > Jari Williamsson