不同机器上的ruby中不同的“upto”行为(`upto':没有给出块(LocalJumpError))

时间:2009-08-06 17:07:36

标签: ruby

此代码适用于一台计算机,但不适用于另一台计算机:

puts 1.upto(5)

在工作机器上,代码返回'#'。

在另一台机器上,我收到此错误:

test.rb:1:在`upto'中:没有给出块(LocalJumpError)     来自test.rb:1

两台机器都有导轨2.2.2。这段代码工作的机器有ruby 1.8.7,而这段代码不起作用的两台机器分别有ruby 1.8.6和ruby 1.8.7企业版。

2 个答案:

答案 0 :(得分:4)

是红宝石1.8.6中的结果需要一个块,而1.8.7则不需要块。

因此,解决方案是升级到1.8.7或使用块或执行1 ... 4.to_a。

答案 1 :(得分:1)

要获得1.8.6中的1.8.7+行为,您可以这样做:

require 'enumerator'
1.enum_for(:upto, 5)

在所有版本中的工作原理相同,并且在功能上等同于1.upto(5),在1.8.7+中没有阻塞(虽然稍微冗长一点)。

虽然在这种特殊情况下你可以使用范围。