В Ruby нет способа динамически определить локальную переменную в текущем контексте? [Дубликат]
На этот вопрос уже есть ответ здесь:
Как динамически создать локальную переменную? 4 ответаМне интересно, есть ли метод, который позволит мне динамически определять ранее неопределенную переменную в текущем контексте. Например:
foo # => NameError: undefined method or local variable ...
# Some method call which sets foo = 1 in the local context
foo # => 1
Иными словами, учитывая, чтоfoo
не определено, я ищу любой код, который позволил бы мне определить локальную переменнуюfoo
без использованияfoo
переменная (например, если у меня была другая переменнаяbar
чья ценность была:foo
и я должен был положиться на это, чтобы установить значениеfoo
).
Кажется, чтоeval('foo = 1')
или жеeval('foo = 1', binding)
или в Ruby 2.1binding.local_variable_set(:foo, 1)
все эквивалентны:
1.times do
foo = 1
end
другими словами, они устанавливаютfoo
в контекстеновый локальный контекст, такой, что значение недоступно за пределами этого контекста.
Возможно ли то, что я хочу сделать?
Обновление: этот вопрос не относится к какому-либо конкретному контексту локальной переменной (модуль / класс, метод, процедура, блок и т. Д.). Мне было бы интересно узнать окончательно любой контекст, где это можно или нельзя сделать.