概要
原著者の許諾を得て翻訳・公開いたします。
- 英語記事: 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)