[譯] Ruby 2.6 增加無窮範圍

Madao-3發表於2018-08-01

本部落格系列翻譯自 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討論

原文地址

部落格地址

相關文章