我刚开始学习不同资源的红宝石阅读。其中一个是rubylearning.com,我只是阅读blocks section并进行练习。出于某种原因,这个示例的范围在我的情况下有所不同:
x = 10
5.times do |x|
puts "x inside the block: #{x}"
end
puts "x outside the block: #{x}"
输出应该是(根据网站):
x inside the block: 0
x inside the block: 1
x inside the block: 2
x inside the block: 3
x inside the block: 4
x outside the block: 10
但我的输出是:
x inside the block: 0
x inside the block: 1
x inside the block: 2
x inside the block: 3
x inside the block: 4
x outside the block: 4
知道为什么吗?本节应该是关于红宝石块的范围,但我现在完全糊涂了......
编辑:
好的我刚才意识到:我正在从textmate执行我的代码。如果我从命令行运行它,我得到预期的结果,加上1.9.2 RUBY_VERSION。但我从Textmate运行1.8.7。有textmate自己安装的ruby版本还是什么? - 0al0 0秒前编辑
答案 0 :(得分:5)
你的例子在ruby 1.9.1之后起作用,正如文章解释的那样:
在Ruby 1.9.1中,块介绍了它们 块参数的自有范围 仅
所以你正在使用另一个ruby版本,试试这个:
ruby -v
我建议安装rvm来管理不同的ruby版本。
答案 1 :(得分:4)
您使用的是过时的Ruby版本。块局部变量的范围在Ruby 1.9.0 +中已经改变。