2

ruby​​ docs中,有这样的文字:

块参数实际上是局部变量。如果在块执行时存在同名的现有本地,则该变量将通过调用块来修改。这可能是也可能不是一件好事。

我写了下面的代码来测试这个:

x = 0
3.upto(6) {|x| puts x}
puts x

# output are:
# 3
# 4
# 5
# 6
# 0

变量x没有改变。为什么?这违反了文档。

4

1 回答 1

8

在 Ruby 1.8 及更早版本中,情况就是如此。从 1.9 开始,块变量隐藏局部变量。

因此,简而言之:您正在阅读的文档和您正在测试的 Ruby 不是同一个版本。

于 2012-10-28T14:53:02.277 回答