From: Florian Gilcher Date: 2010-06-02T01:24:18+09:00 Subject: Re: using "require" in irb, where did my variables go!? 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! 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