Tom Rauchenwald
7/25/2006 6:45:00 PM
yuesefa <yuesefa@gmail.com> writes:
> i try this in irb .
>
> irb(main):001:0> def a=(a)
> irb(main):002:1> @a=a
> irb(main):003:1> end
> => nil
> irb(main):004:0> def a
> irb(main):005:1> @a
> irb(main):006:1> end
> => nil
> irb(main):007:0> a=1
> => 1
> irb(main):008:0> a
> => 1
irb(main):010:0> @a
=> nil
irb(main):011:0> self.a
=> nil
That means that not the method a= was called, but the local variable a was set
to one.
> irb(main):009:0> self.a=2
> => 2
Here you expicitly call the method, so @a is set to 2.
> irb(main):010:0> a
> => 1
But the local variable a is still 1.
> irb(main):011:0> self.a
> => 2
Here the method a is explicitly called, so you get what you expected.
> a and a= should be private methods of Object. so call of a or self.a
> should do the same thing. but it's not. i am now confused.
It's simply because the ruby-interpreter can't tell what you want when you
write a=1 -- do you want to set a to 1, or do you want to call the method a?
HTH,
Tom