Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby阻塞了示例,但没有按预期工作_Ruby_Scope - Fatal编程技术网

Ruby阻塞了示例,但没有按预期工作

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

我刚刚开始从不同的资源学习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 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