Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

variable scope in required files

6 views
Skip to first unread message

Dave Baldwin

unread,
May 20, 2004, 10:08:04 AM5/20/04
to
This behaviour has rather surprised me:

file a.rb
a = 10

file b.rb
require "a.rb"
puts a

dave 123% ruby b.rb
b.rb:2: undefined local variable or method `a' for main:Object
(NameError)

dave 124% ruby -v
ruby 1.8.1 (2003-10-31) [powerpc-darwin]

Using $a fixes this but I don't want to do this or I could join the
two files at run time and eval them.

I didn't expect the scope of a to be private to a.rb and can find no
mention in pickaxe about this.

Dave.

Carlos

unread,
May 20, 2004, 10:39:22 AM5/20/04
to
[Dave Baldwin <dave.b...@3dlabs.com>, 2004-05-20 16.08 CEST]

If I'm not mistaken, scopes for local variables are created by files,
class/module and method definitions, and blocks.

They don't nest, except for blocks.

For your problem, you can use a constant, or use 'a=nil;
eval(File.read("a.rb")); p a', etc.

--


Kevin Bullock

unread,
May 20, 2004, 3:23:44 PM5/20/04
to

In C, unless you declare them extern[1], variables are private to the
file they're declared in. Using the $a notation is equivalent to
declaring the variable extern. It indicates you're using a global
variable instead of a local one.

Perhaps the better question, though, is why do you need a global
variable? Every time I feel the urge to use a global variable, I ask
myself that question.

[1] E.g.: extern a = 1;

0 new messages