Как делают Вас переменные доступа, которые определяются во включенном файле?
# inc.rb
foo = "bar";
# main.rb
require 'inc.rb'
puts foo
# NameError: undefined local variable or method `foo' for main:Object
Вы не можете получить доступ к локальной переменной за пределами области видимости, в которой она была определена - в данном случае файла. Если вам нужны переменные, пересекающие границы файла, сделайте их чем угодно, только не локалями. $foo
, Foo
и @foo
будут работать.
Если вы просто не хотите накладывать на символ никаких украшений (потому что вам не нравится, как он читается, возможно), распространенный хак - просто определить его как метод: def foo() "bar" end
.
Я принял ответ Чака, потому что это достойное решение, однако на самом деле я использовал другой метод, которым, как я думал, поделюсь. Это невероятно взломано, но было полезно для моих целей. Мне нужно было просканировать каталог с сотнями файлов, каждый из которых создал объект с таким же именем, а затем выгрузить некоторую информацию о каждом объекте. Для любых серьезных и временных целей я не рекомендовал бы это!
foo = ""
eval File.open('inc.rb').read
puts foo # "bar"