Ruby 迭代器块内的词法作用域
Ruby lexical scope inside iterator block
在 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 的一本书来回答:Well Grounded Rubyist,第 6 章,第 6 页。 158.(2014 年第二版):
当 Ruby 解析器看到序列 identifier、equal-sign 和 value,在这个表达式中,
a = 123
它为局部变量a
分配了space。变量的创建 - 不是为其赋值,而是变量的内部创建 - 总是作为这种表达式的结果发生,如果代码未执行则事件。
在 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 的一本书来回答:Well Grounded Rubyist,第 6 章,第 6 页。 158.(2014 年第二版):
当 Ruby 解析器看到序列 identifier、equal-sign 和 value,在这个表达式中,
a = 123
它为局部变量a
分配了space。变量的创建 - 不是为其赋值,而是变量的内部创建 - 总是作为这种表达式的结果发生,如果代码未执行则事件。