Using "require" in irb, where did my variables go!?

Hello,

I have a somewhat basic question: lets say that in my working directory
I have a file called my_vars.rb.

It contains:
  x = 5.0
  puts "your variable x is #{x}"

Now, I fire up irb in my command window, and type in
  require "my_vars.rb"

Which outputs, as expected,
  your variable x is 5.0
  => true

Now, I want to access that variable again, so I enter in:
  puts x

and I get an error saying that x is undefined. It's like it was
temporarily there in memory, but then once it was used, it got thrown
away! Does anyone know how to load in a file and keep using the
variables that were in said file?

Thanks!

···

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

Tim Apple wrote:

Hello,

I have a somewhat basic question: lets say that in my working directory
I have a file called my_vars.rb.

It contains:
  x = 5.0
  puts "your variable x is #{x}"

Now, I fire up irb in my command window, and type in
  require "my_vars.rb"

Which outputs, as expected,
  your variable x is 5.0
  => true

Now, I want to access that variable again, so I enter in:
  puts x

and I get an error saying that x is undefined. It's like it was
temporarily there in memory, but then once it was used, it got thrown
away! Does anyone know how to load in a file and keep using the
variables that were in said file?

Thanks!

You could define x as a global variable $x e.g.:
#in my_vars.rb
$x = 5
puts "your variable x is #{$x}"

···

--
Posted via http://www.ruby-forum.com/\.

Using globals to allow locals to talk across files seems pretty shaky. Why
do you need to be able to do this? Probably there is a better way. Perhaps
put all that code into one file. Perhaps put it into a method, and have it
return the variables of interest (you can conditionally invoke the method if
the file is required vs if the file is the primary program by comparing $0
to __FILE__)

···

On Mon, May 31, 2010 at 9:23 PM, Tim Apple <timmyrunsfast@gmail.com> wrote:

Hello,

I have a somewhat basic question: lets say that in my working directory
I have a file called my_vars.rb.

It contains:
x = 5.0
puts "your variable x is #{x}"

Now, I fire up irb in my command window, and type in
require "my_vars.rb"

Which outputs, as expected,
your variable x is 5.0
=> true

Now, I want to access that variable again, so I enter in:
puts x

and I get an error saying that x is undefined. It's like it was
temporarily there in memory, but then once it was used, it got thrown
away! Does anyone know how to load in a file and keep using the
variables that were in said file?

Thanks!
--
Posted via http://www.ruby-forum.com/\.

There is a way around this, although I think that the "usual" solutions (wrapping this data into a proper object or method) are much better.

All code in Ruby is evaluated inside the context of an object. In other terms: self is always defined. Code outside of class statements, module statements and some special statements that change the binding is evaluated inside the toplevel object (called "main"). "main" is just a normal object and we can thus set instance variables:

  File: test.rb
    @b = 42
  
  File: inc.rb
    require "test"
    puts @b #=> prints 42

Those instance variables can only be accessed in the toplevel context and not in any other object or class.

I don't think this is a good way to do it, but it is a nice way of illustrating how far "everything is an object" is rooted into ruby.

Gruß,
Skade

···

On Jun 1, 2010, at 4:23 AM, Tim Apple wrote:

Hello,

I have a somewhat basic question: lets say that in my working directory
I have a file called my_vars.rb.

It contains:
x = 5.0
puts "your variable x is #{x}"

Now, I fire up irb in my command window, and type in
require "my_vars.rb"

Which outputs, as expected,
your variable x is 5.0
=> true

Now, I want to access that variable again, so I enter in:
puts x

and I get an error saying that x is undefined. It's like it was
temporarily there in memory, but then once it was used, it got thrown
away! Does anyone know how to load in a file and keep using the
variables that were in said file?

Thanks!