From: Andrew Wagner Date: 2010-10-07T07:42:40+09:00 Subject: Re: Missing @ for instace variable in class, but no error message --0016e6d972b58ba1610491fa7ecd Content-Type: text/plain; charset=UTF-8 attr_accessor actually defines a public instance method, named 'a'. That method can be called from both inside and outside the class. So, it's not an error, it's perfectly valid. On Wed, Oct 6, 2010 at 6:11 PM, Stefan Salewski wrote: > Some days ago I was defining a class, but forgot to use the leading @ > for an instance variable. But it still works -- that variable was made > accessible by attr_accessor statement. So my question: > > Why gives the statement "puts a" no error message? In my opinion it > should give one, I forgot to use @. The "attr_accessor :a" was only > there to allow access from outside of that class, for instance > variables. > > #!/usr/bin/ruby -w > class Test > attr_accessor :a > def initialize > @a = 0 > @b = 1 > end > def show_values > puts a # should be @a, but seems to work > puts b # gives an error, as expected > end > end > t = Test.new > t.show_values > > Output is: > ruby --version > ruby 1.8.7 (2010-08-16 patchlevel 302) [x86_64-linux] > > ruby test.rb > 0 > test.rb:11:in `show_values': undefined local variable or method `b' for > # (NameError) > from test.rb:16 > > Best regards, > > Stefan Salewski > > > > --0016e6d972b58ba1610491fa7ecd--