irb question

R

Rand Waltzman

Greetings All

I have a question about bindings in the irb when you load a file into
it. Here is a sample file I tried loading:

def hello
puts "hello there"
end
jello = 42
puts jello

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?

Thanks for any help on this in advance.

Rand
 
K

Kalman Noel

Rand said:
I load this file from the irb using: load 'test.rb'
[...]
NameError: undefined local variable or method `jello' for main:Object
from (irb):2

Local variables are local to a file. Use a constant (Jello) or an instance
variable of the main object (@jello).

Kalman
 
R

Rand Waltzman

Kalman

Thanks. Using a constant worked. Any ideas about the second part of
the question?

Rand

Kalman said:
Rand said:
I load this file from the irb using: load 'test.rb'
[...]
NameError: undefined local variable or method `jello' for main:Object
from (irb):2

Local variables are local to a file. Use a constant (Jello) or an
instance
variable of the main object (@jello).

Kalman
 
K

Kalman Noel

Rand Waltzman:
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.

Kalman
 
R

Rand Waltzman

Kalman

Thanks for your help. I really appreciate it.

Rand

Kalman said:
Rand Waltzman:
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.

Kalman
 
P

Pit Capitain

Kalman said:
Rand Waltzman:
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.

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,774
Messages
2,569,598
Members
45,149
Latest member
Vinay Kumar Nevatia0
Top