Ruby块参数具有相同的局部变量名称

Yue*_*oum 1 ruby

ruby docs中,有这样的文字:

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

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

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

# output are:
# 3
# 4
# 5
# 6
# 0
Run Code Online (Sandbox Code Playgroud)

变量x不会更改.为什么?这是针对文档的.

Dom*_*nef 6

在Ruby 1.8及更早版本中,就是这种情况.从1.9开始,块变量影响局部变量.

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