这个问题专门针对 Ruby 1.9.3:
p defined?(a)
p binding.eval "defined?(a)"
b = lambda { |x| x }
p b.binding.eval "defined?(a)" # This prints "local-variable"
p defined?(a) # This prints nil!
a = 2
p defined?(a)
p b.binding.eval "defined?(a)"
让我困惑的是第四行。我不确定为什么这会打印“局部变量”而不是零。这似乎暗示 lambda 在某种程度上“看得更远”。(我defined?
认为作为一名操作员与此有关。)
此外,虽然绑定说它已定义,但尝试像这样使用它:
p b.binding.eval "a"
在第 6 行的赋值导致 NameError 之前。
编辑:我已经对此进行了测试
- 1.9.3-362
- 1.9.3-374
- 2.0.0-预览2
在所有情况下,我都会得到相同的行为。