我想一個局部變量設置爲現有結合注射局部變量綁定
def foo_callback
lambda { |name| p name }
end
b = foo_callback.binding
結合沒有任何局部變量來開始:
b.eval("local_variables") # => []
設我們設置了原始局部變量綁定:
b.eval("age=30")
一切正常:
b.eval("local_variables") # => ["age"]
b.eval("age") # => 30
現在,讓我們嘗試將非基本局部變量設置爲綁定:
country = Country.first
b.eval("lambda {|v| country = v}").call(country)
注:的technique設置的變量是從facet
寶石借來的。我試着紅寶石1.9安全implementation具有相同的結果。
綁定不反映局部變量country
。
b.eval("local_variables") # => ["age"]
我該如何解決這個問題?實質上,我想用一個現有的非原始變量的值在綁定中聲明一個新變量。
我在Ruby 1.8.7上。
結合()是私有的,這樣的結合可以永遠這樣調用:'B = foo_callback.binding' – 7stud 2014-09-09 21:27:43
@ 7stud可以。在ruby控制檯中運行代碼'def foo_callback lambda {| name | p name} end b = foo_callback.binding' – 2014-09-09 22:01:41