Ruby загрузить / требовать файлы - PullRequest
1 голос
/ 01 февраля 2012

То, что я пытаюсь сделать в Ruby, эквивалентно выражению PHP include или require.

В 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 и поместил config, все та же ошибка.

Это похоже на то, что включенный файл не выполняет код внутри него.Это то, что происходит, или я просто делаю что-то не так?

Спасибо

1 Ответ

2 голосов
/ 01 февраля 2012

config не является глобальной переменной, это локальная переменная, и область видимости локальной переменной не распространяется на require или load.

Если вам нужна глобальная переменная, вам нужно вызвать ее $config - префикс указывает, является ли переменная локальной (без префикса), глобальной ($) или переменной экземпляра (@). Константа также может быть уместной.

...