I load this file from the irb using: load ‘test.rb’
The response is that it prints out the number 42. So far so good.
If I type hello to the prompt, I get “hello there” as expected. Also so
far so good. However, when I type jello I get the following message:
NameError: undefined local variable or method `jello’ for main:Object
from (irb):2
The question is, why was hello bound and jello not?
Another interesting phenomenon occurs if I type “hello = 42” to the
interpreter, i.e., I try to rebind hello. That seems to work fine as
well. If I type hello, I get 42 as expected. However, if I try to
reenter the definition of hello as I had it in the original file and try
typing hello again, I still get 42. The question is, why didn’t it
allow me to rebind hello?
def hello
puts “hello there”
end
[…]
Another interesting phenomenon occurs if I type “hello = 42” to the
interpreter, i.e., I try to rebind hello. That seems to work fine as
well. If I type hello, I get 42 as expected. However, if I try to
reenter the definition of hello as I had it in the original file and try
typing hello again, I still get 42. The question is, why didn’t it
allow me to rebind hello?
In Ruby, methods and local variables live in different parts of the
world.
The current object can have a method with the same name as a local
variable. In such cases, the interpreter supposes that the programmer
forgot about the method and wants the variable.
def hello
puts “hello there”
end
[…]
Another interesting phenomenon occurs if I type “hello = 42” to the
interpreter, i.e., I try to rebind hello. That seems to work fine as
well. If I type hello, I get 42 as expected. However, if I try to
reenter the definition of hello as I had it in the original file and try
typing hello again, I still get 42. The question is, why didn’t it
allow me to rebind hello?
In Ruby, methods and local variables live in different parts of the
world.
The current object can have a method with the same name as a local
variable. In such cases, the interpreter supposes that the programmer
forgot about the method and wants the variable.
In Ruby, methods and local variables live in different parts of the world.
The current object can have a method with the same name as a local
variable. In such cases, the interpreter supposes that the programmer
forgot about the method and wants the variable.
Note also, that you can still call the method, if there are parentheses
or parameters passed to the method:
def a; “method”; end
a = “local variable”
puts a # => local variable
puts a() # => method
Regards,
Pit
This forum is not affiliated to the Ruby language, Ruby on Rails framework, nor any Ruby applications discussed here.