[译] Ruby 2.6 增加无穷范围

本博客系列翻译自 Bigbinary 的 Ruby 2.6 系列, 已得到作者允许。Ruby 2.6.0-preview2 现已发布

在Ruby 2.6 之前,如果你想要使用带上索引(index)的无限循环,我们得用 Float::INFINITY 然后用 #upto 方法 或者实现一个Range 实例,或者用 Numeric#step 方法。

Ruby 2.5.0

irb> (1..Float::INFINITY).each do |n|  
irb*   # logic goes here  
irb> end  

或者

irb> 1.step.each do |n|  
irb*   # logic goes here  
irb> end  

Ruby 2.6.0

Ruby 2.6 让Range 中第二个参数变成可选的,让无限循环更具有可读性(并没有)。Ruby 让第二个参数可以是nil,所以 (0..) 和 (0..nil) 在Ruby 2.6 是等价的了。

irb> (0..).each do |n|  
irb*   # logic goes here  
irb> end  
irb> (0..nil).size  
=> Infinity
irb> (0..).size  
=> Infinity

如果是Ruby 2.5, (0..nil) 这样会抛出 ArgumentError。

irb> (0..nil)  
ArgumentError (bad value for range)  

这里是相关的commit讨论

原文地址