Ruby2.6アドベントカレンダーの14日目の記事です。
Range
Range#step
が Enumerator::ArithmeticSequence
オブジェクトを返す
https://bugs.ruby-lang.org/issues/13904
単純な Enumerator ではなく step
に指定した引数情報を取得できる Enumerator::ArithmeticSequence
オブジェクトを返すようになりました。
a = (1..10).step(2) #=> #<Enumerator::ArithmeticSequence> a.begin #=> 1 a.end #=> 10 a.first(2) #=> [1, 3] # これは 2.5 から可能 a.last(2) #=> [7, 9] a.step #=> 2
Added Range#%
追加
https://bugs.ruby-lang.org/issues/14697
Range#step
(ブロック無し)の別名として Range#%
が追加されました。
Range#===
が #include?
だけではなく #cover?
も使う
https://bugs.ruby-lang.org/issues/14575
2.5 では Range#===
は単純に Range#include?
を呼び出してるだけでしたが、2.6 では次のように振る舞うようです(たぶん)。
- 始端が数値または文字列であれば
#include?
を使う - そうでなければ
#cover?
を使う
これにより次のような比較ができるようになります。
(Date.today .. Date.today+1) === DateTime.now #=> true (2.5 では false)
Range#cover?
が Range オブジェクトも受けつける
https://bugs.ruby-lang.org/issues/14473
("a".."f").cover?("c".."e") #=> true (2.5 では false) ("a".."f").cover?("c".."g") #=> false