迭代器块内的 Ruby 词法范围



In Ruby (v2.5.0(...

[1,2,3].map do |i|
  if i.eql?(3)
    a = 123
  end
  defined?(a)
end
=> ["local-variable", "local-variable", "local-variable"]

有人可以向我解释一下,如果直到第三次迭代才设置,a如何在第一次和第二次迭代中成为local-variable(等于 nil(?

提前感谢!

我将引用A.Black的一本书来回答:《扎根的Rubyist》,第6章,第158页。(2014年第二版(:

当 Ruby 解析器看到序列标识符等号时,如此表达式中,

a = 123

它为局部变量分配空间 a 。变量的创建 - 不是为其赋值,而是变量的内部创建 - 总是作为这种表达式的结果发生,如果代码未执行,则为事件。

最新更新