2012-02-01 63 views
1

我在Ruby中試圖做的是相當於PHP的include或require語句。Ruby加載/需要文件

在PHP中,當您包含或需要文件時,包含文件中的任何PHP代碼都會執行,並且全局範圍的變量可以用於包含include的文件。

在Ruby中,我有這樣的代碼;

# include file snippet 
config = {'base_url' => 'http://devtest.com/'} 

# main file 
Dir.foreach(BASE_ROOT_PATH + 'config') do |file| 
    if !(file == '.' || file == '..') 
    filepath = BASE_ROOT_PATH + 'config/' + file 
    load filepath 
    end 
end 

config.inspect 

我遇到的問題是,當我運行主文件時,它總是出錯與此錯誤;

/home/skittles/devtest/bootstrap.rb:24:in `<top (required)>': undefined local variable or method `config' for main:Object (NameError) 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from <internal:lib/rubygems/custom_require>:29:in `require' 
    from index.rb:27:in `<main>' 

我知道,它的拉動在該文件中,因爲它沒有拋出任何錯誤。 我試過加載&要求,兩者都有相同的錯誤。我嘗試config.inspect並放置配置,仍然是相同的錯誤。

這幾乎就像包含的文件沒有執行它裏面的代碼。這是怎麼回事,或者我只是做錯了什麼?

感謝

+0

我可以問你想要完成什麼嗎?以錯誤的順序加載所有配置文件是導致此錯誤的原因。您通常只會加載'environment.rb'文件,並且會加載其他所有內容 – PinnyM 2012-02-01 14:58:48

+0

OP沒有說他正在使用Rails ... – Chowlett 2012-02-01 15:00:33

+0

http://stackoverflow.com/questions/2699324/ruby-irb - 要求和範圍 – Chowlett 2012-02-01 15:04:32

回答

2

config是不是一個全球範圍的變量 - 這是一個局部變量和局部變量的作用域跨requireload不舒展。

如果您確實需要全局變量,那麼您需要調用它$config - 前綴表示變量是本地(無前綴),全局($)還是實例變量(@)。常量也可能是適當的。

+0

謝謝你,弗雷德裏克!我不知道Ruby有一個表示某種東西是全局的符號。我改變了配置行,以便變量現在是$ config。我認爲這有效。至少現在,當我使用puts $ config.to_yaml時,它實際上向我顯示了config var中的值。 – Skittles 2012-02-01 15:24:51

相關問題