如何在 Ruby 中创建/提取变量/散列到当前绑定中?例如,以下结果为NameError
:
class Hash
def extract(b)
self.each do |key, value|
bind = b.eval <<-END
#{key} = nil
proc { |value| #{key} = value }
END
bind.call(value)
end
end
end
hash = {:a => 1}
hash.extract(binding)
puts a
值得注意的是,每次调用都Kernel#binding
返回一个不同的
Binding
对象实例,这让我觉得我并没有真正改变调用者的绑定Hash#extract
。例如,以下工作:
class Hash
def extract(b)
self.each do |key, value|
bind = b.eval <<-END
#{key} = nil
proc { |value| #{key} = value }
END
bind.call(value)
end
end
end
hash = {:a => 1}
b = binding
hash.extract(b)
eval('puts a', b)