Ruby阻塞了示例,但没有按预期工作
我刚刚开始从不同的资源学习ruby阅读。其中一个是rubylearning.com,我只是在阅读和做练习。出于某种原因,在我的案例中,此示例的范围不同:Ruby阻塞了示例,但没有按预期工作,ruby,scope,Ruby,Scope,我刚刚开始从不同的资源学习ruby阅读。其中一个是rubylearning.com,我只是在阅读和做练习。出于某种原因,在我的案例中,此示例的范围不同: 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 in
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: 4
知道为什么吗?本节应该是关于ruby块中的作用域的,但我现在完全搞不懂
编辑:
好吧,我刚刚意识到:我在执行来自textmate的代码。如果我从命令行运行它,我会得到预期的结果,加上1.9.2 RUBY_版本。但是我从Textmate那里得到了1.8.7运行它。textmate是否安装了自己的ruby版本0al0 0秒前编辑您使用的是过时的Ruby版本。Ruby 1.9.0+中块局部变量的范围发生了变化。您的示例自Ruby 1.9.1以来一直有效,如本文所述: 在Ruby 1.9.1中,块引入了 拥有块参数的作用域 只是 如果您正在使用另一个ruby版本,请尝试以下方法:
ruby -v
我建议安装以管理不同的ruby版本。您使用的是什么版本的ruby?ruby 1.9.2,根据ruby-vare的说法,您确定吗?使用Ruby 1.9.2,您应该会得到第一个(预期的)结果。(Ruby 1.8.x将输出第二个版本)请在script@levinalex我照你说的做了,得了1.8.7分。但是我使用ruby-v得到了1.9.2。。。
ruby -v