From: Tom Rauchenwald Date: 2006-07-26T03:45:12+09:00 Subject: Re: method self.a= and a= create different instance variables yuesefa 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