[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

irb question

Rand Waltzman

9/17/2006 11:24:00 AM

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

--
Posted via http://www.ruby-....

5 Answers

Kalman Noel

9/17/2006 12:07:00 PM

0

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

Rand Waltzman

9/17/2006 12:28:00 PM

0

Kalman

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

Rand

Kalman Noel wrote:
> Rand Waltzman wrote:
>> 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


--
Posted via http://www.ruby-....

Kalman Noel

9/17/2006 2:20:00 PM

0

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

Rand Waltzman

9/17/2006 2:53:00 PM

0

Kalman

Thanks for your help. I really appreciate it.

Rand

Kalman Noel wrote:
> 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


--
Posted via http://www.ruby-....

Pit Capitain

9/18/2006 8:01:00 AM

0

Kalman Noel schrieb:
> 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