Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳)

概要 原著者の許諾を得て翻訳・公開いたします。 英語記事: Ruby 2.6 adds endless range | BigBinary Blog 原文公開日: 2018/07/04 著者: Taha Husain サイト: BigBinary Ruby 2.6先行チェック: rangeの終端をnilまたは省略できる(翻訳) Ruby 2.6シリーズの記事です。Ruby 2.6.0-preview2は最近リリースされました。 Ruby 2.6より前は、無限ループでインデックスを使いたいときはuptoやRangeでFloat::INFINITYを使うか、Numeric#stepを使う必要がありました。 Ruby 2.5.0の場合 irb> (1..Float::INFINITY).each do |n| irb* # ここにロジックを置く irb> end irb> 1.step.each do |n| irb* # ここにロジックを置く irb> end Ruby 2.6.0の場合 Ruby 2.6では、無限ループのrangeでこれまで必須だった第2引数を省略可能にしたことで読みやすさを向上させました。rangeの第2引数が指定されていない場合はnilと解釈されるので、(0..)と(0..nil)はRuby 2.6で同じ意味になります。 Ruby 2.6で無限ループをrangeで書く irb> (0..).each do |n| irb* # ここにロジックを置く irb> end irb> (0..nil).size => Infinity irb> (0..).size => Infinity Ruby 2.5ではrangeの引数にnilを取れないので、(0..nil)はArgumentErrorになります。 irb> (0..nil) ArgumentError (bad value for range) commit: 7f95eed やりとり: #12912 関連記事 Ruby 2.6先行チェック: `String#split`がブロックを取れる(翻訳)