HiddenBek
11/30/2007 3:11:00 PM
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
<jari.williams...@mailbox.swipnet.se> 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