Próbuję ustawić zmienną lokalną do istniejącego wiązaniaWstrzykiwanie zmiennej lokalnej do wiązania
def foo_callback
lambda { |name| p name }
end
b = foo_callback.binding
Wiązanie nie ma żadnych zmiennych lokalnych na początek:
b.eval("local_variables") # => []
Let nam ustawić prymitywny zmiennej lokalnej do wiązania:
b.eval("age=30")
wszystko działa zgodnie z oczekiwaniami:
b.eval("local_variables") # => ["age"]
b.eval("age") # => 30
Teraz spróbujmy ustawić zakaz prymitywny zmiennej lokalnej do wiązania:
country = Country.first
b.eval("lambda {|v| country = v}").call(country)
Uwaga:technique ustawiania zmienna jest zapożyczona z facet
gem. Próbowałem Ruby 1.9 bezpieczne implementation z takimi samymi wynikami.
Wiązanie nie odzwierciedla lokalnej zmiennej country
.
b.eval("local_variables") # => ["age"]
Jak obejść ten problem? Zasadniczo chcę zadeklarować nową zmienną w powiązaniu przy użyciu wartości istniejącej, nieprostowej zmiennej.
Jestem na Ruby 1.8.7.
wiązania() jest prywatny, więc wiązanie nigdy można nazwać tak: 'b = foo_callback.binding' – 7stud
@ 7stud Można. Uruchom kod w konsoli ruby 'def foo_callback lambda {| name | p nazwa} koniec b = foo_callback.binding' –