Estoy tratando de establecer una variable local a un enlace existenteuna variable local a una consolidación
def foo_callback
lambda { |name| p name }
end
b = foo_callback.binding
La unión no tiene ninguna de las variables locales, para empezar:
b.eval("local_variables") # => []
Let Establezcamos una variable local primitiva a la unión:
b.eval("age=30")
todo funciona como se esperaba:
b.eval("local_variables") # => ["age"]
b.eval("age") # => 30
Ahora, vamos a tratar de establecer una variable local no primitiva a la unión:
country = Country.first
b.eval("lambda {|v| country = v}").call(country)
Nota: Eltechnique para establecer la variable es tomado de la facet
joya. Probé el ruby 1.9 safe implementation con los mismos resultados.
El enlace no refleja la variable local country
.
b.eval("local_variables") # => ["age"]
¿Cómo puedo evitar este problema? Esencialmente, quiero declarar una nueva variable en un enlace utilizando el valor de una variable existente, no primitiva.
Estoy en Ruby 1.8.7.
() es privada, por lo que la unión no se puede llamar así: 'b = foo_callback.binding' – 7stud
@ 7stud Puede. Ejecute el código en la consola de ruby 'def foo_callback lambda {| name | p nombre} final b = foo_callback.binding' –