Доступ к переменным из включенных файлов в Ruby

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

# inc.rb
foo = "bar";


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

# NameError: undefined local variable or method `foo' for main:Object
8
задан nickf 18 May 2010 в 01:15
поделиться

2 ответа

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

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

15
ответ дан 5 December 2019 в 07:10
поделиться

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

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

puts foo # "bar"
6
ответ дан 5 December 2019 в 07:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: