2010-05-18 61 views
8

如何訪問在包含文件中定義的變量?從Ruby中的包含文件訪問變量

# inc.rb 
foo = "bar"; 


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

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

回答

15

您不能在本例中定義的範圍之外訪問本地範圍以外的本地。如果你想要跨越文件邊界的變量,除了當地人之外,任何東西都可以。 $fooFoo@foo都將工作。

如果你真的不想在符號上加任何裝飾(因爲你不喜歡它的讀法,也許),一個常見的黑客就是將它定義爲一個方法:def foo() "bar" end

6

我接受查克的答案,因爲這是一個體面的解決方案,但是我實際上使用了一種不同的方法,我認爲我會分享。這非常令人難以置信,但對我的目的很有用。我需要掃描一個包含數百個文件的目錄,每個文件創建一個具有相同名稱的對象,然後轉儲有關每個對象的一些信息。對於任何嚴重和非臨時的目的,我不會推薦這個!

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

puts foo # "bar" 
1

我通常只是將它們定義爲方法。類似於nickf所說的。

文件1:

def static_path 
    '/opt/foo' 
end 

文件2:

static_path 

然後,只需添加一個:

require_relative 'file path/file name'require_relative 'file name' < =如果文件在同一目錄。

到要使用的方法/變量的文件中。