S
Stefan Salewski
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
#<Test:0x7f85f99c02f8 @b=1, @a=0> (NameError)
from test.rb:16
Best regards,
Stefan Salewski
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
#<Test:0x7f85f99c02f8 @b=1, @a=0> (NameError)
from test.rb:16
Best regards,
Stefan Salewski