Sto cercando di impostare una variabile locale a una esistente vincolanteIniettando una variabile locale ad un legame
def foo_callback
lambda { |name| p name }
end
b = foo_callback.binding
Il legame non ha variabili locali per cominciare:
b.eval("local_variables") # => []
Let a impostare una variabile locale primitiva alla rilegatura:
b.eval("age=30")
tutto funziona come previsto:
b.eval("local_variables") # => ["age"]
b.eval("age") # => 30
Ora, cerchiamo di impostare una variabile locale non primitiva alla rilegatura:
country = Country.first
b.eval("lambda {|v| country = v}").call(country)
Nota: Il technique per impostare la variabile è preso in prestito dal facet
gemma. Ho provato il rubino 1.9 sicuro implementation con gli stessi risultati.
L'associazione non riflette la variabile locale country
.
b.eval("local_variables") # => ["age"]
Come risolvere questo problema? In sostanza, voglio dichiarare una nuova variabile in un'associazione usando il valore di una variabile esistente, non primitiva.
Sono su Ruby 1.8.7.
vincolante() è privata, quindi legame può mai essere chiamato in questo modo: 'b = foo_callback.binding' – 7stud
@ 7stud È possibile. Esegui il codice nella console ruby 'def foo_callback lambda {| name | p nome} fine b = foo_callback.binding' –