Доступ к переменным из включенных файлов в Ruby - PullRequest
8 голосов
/ 18 мая 2010

Как получить доступ к переменным, которые определены во включаемом файле?

# inc.rb
foo = "bar";


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

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

Ответы [ 3 ]

15 голосов
/ 18 мая 2010

Вы не можете получить доступ к локальному файлу вне области, в которой он был определен - в данном случае к файлу. Если вы хотите, чтобы переменные пересекали границы файлов, делайте их не локальными. $foo, Foo и @foo будут работать.

Если вы просто не хотите наносить какие-либо украшения на символ (потому что, возможно, вам не нравится, как он читается), обычным хаком является просто определить его как метод: def foo() "bar" end .

6 голосов
/ 18 мая 2010

Я принял ответ Чака, потому что это достойное решение, однако я фактически использовал другой метод, которым, я думал, я поделюсь. Это невероятно смешно, но было полезно для моих целей. Мне нужно было просмотреть каталог с сотнями файлов, каждый из которых создал объект с тем же именем, а затем вывести некоторую информацию о каждом объекте. Для любых серьезных и не временных целей я не рекомендую рекомендовать это!

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

puts foo # "bar"
2 голосов
/ 01 апреля 2017

Я обычно просто определяю их как методы. Подобно тому, что сказал Никф.

File1:

def static_path
  '/opt/foo'
end

File2:

static_path

Затем просто добавьте:

require_relative 'file path/file name' или require_relative 'file name' <=, если файлы находятся в одном и том же каталоге. </p>

к файлу, в котором вы хотите использовать метод / переменную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...