从Ruby中包含的文件中访问变量

时间:2010-05-18 01:15:12

标签: ruby include

如何访问包含文件中定义的变量?

# inc.rb
foo = "bar";


# main.rb
require 'inc.rb'
puts foo

# NameError: undefined local variable or method `foo' for main:Object

3 个答案:

答案 0 :(得分:15)

您无法访问其定义范围之外的本地 - 本例中的文件。如果您想要跨越文件边界的变量,请将它们设置为除本地之外的任何变量<{1}},$fooFoo都可以。

如果你真的不想在符号上放置任何类型的装饰(因为你不喜欢它的读取方式,可能),一个常见的黑客只是将它定义为一种方法:{{1 }}

答案 1 :(得分:6)

我已经接受了Chuck的答案,因为它是一个不错的解决方案,但我实际上使用了一种不同的方法,我认为我会分享。这是非常hacky,但对我的目的很有用。我需要扫描一个包含数百个文件的目录,每个文件创建一个具有相同名称的对象,然后转储有关每个对象的一些信息。对于任何严重和非临时目的,我不会推荐这个!

foo = ""
eval File.open('inc.rb').read

puts foo # "bar"

答案 2 :(得分:2)

我通常只是将它们定义为方法。与nickf所说的相似。

File1中:

def static_path
  '/opt/foo'
end

文件2:

static_path

然后只需添加一个:

require_relative 'file path/file name'require_relative 'file name'&lt; =如果文件位于同一目录中。

到你想要使用方法/变量的文件。