Czy w Rubim nie ma możliwości dynamicznego zdefiniowania zmiennej lokalnej w bieżącym kontekście? [duplikować]
To pytanie ma już tutaj odpowiedź:
Jak dynamicznie tworzyć zmienną lokalną? 4 odpowiedziZastanawiam się, czy istnieje metoda, która pozwoli mi dynamicznie zdefiniować wcześniej niezdefiniowaną zmienną w bieżącym kontekście. Na przykład:
foo # => NameError: undefined method or local variable ...
# Some method call which sets foo = 1 in the local context
foo # => 1
Innymi słowy, biorąc pod uwagę tofoo
jest niezdefiniowane, szukam dowolnego kodu, który pozwoliłby mi zdefiniować zmienną lokalnąfoo
bez użyciafoo
zmienna (np. gdybym miał inną zmiennąbar
której wartość wynosiła:foo
i musiałem polegać na tym, aby ustawić wartośćfoo
).
Wygląda na to żeeval('foo = 1')
lubeval('foo = 1', binding)
lub w Ruby 2.1,binding.local_variable_set(:foo, 1)
wszystkie są równoważne:
1.times do
foo = 1
end
innymi słowy, ustawiająfoo
w kontekście aNowy kontekst lokalny, tak że wartość jest niedostępna poza tym kontekstem.
Czy to, co chcę zrobić, jest możliwe?
Aktualizacja: To pytanie nie dotyczy konkretnego kontekstu zmiennej lokalnej (moduł / klasa, metoda, proc, blok itp.). Byłabym zainteresowana definitywnym poznaniem dowolnego kontekstu, w którym można lub nie można tego zrobić.