今週の気になった bugs.ruby
内容は適当です。
今週と言っても今週みかけたチケットなだけでチケット自体は昔からあるやつもあります。
今週は少なめ。
[Bug #17017] Range#max & Range#minmax incorrectly use Float end as max
Range#max
とRange#minmax
の戻り値に一貫性がない- 例えば以下のように
to_a.max
とmax
で値が違う
(1..3.1).to_a == [1, 2, 3] # As expected (1..3.1).to_a.max == 3 # As expected (1..3.1).to_a.minmax == [1, 3] # As expected (1..3.1).max == 3.1 # Should be 3, as above (1..3.1).minmax == [1, 3.1] # Should be [1, 3], as above
- このバグは修正され、開発版では以下のような値が返ってくる
(1..3.1).max # => 3 (1..3.1).minmax # => [1, 3]
- また以下のようなコードの場合、非互換な挙動になるので注意する
- この影響で rubocop がぶっ壊れていたらしい
- 明示的に
Float
に変換すると大丈夫
# 2.7.1 : Infinity を返す # 2.8.0dev : error: `floor': Infinity (FloatDomainError) p (42..Float::INFINITY).max # 明示的に Float に変換すると OK p (42.to_f..Float::INFINITY).max
- この問題関連でチケットが再オープンされている
- もしかしたら今後また挙動が変わるかも?
- Range 無限に難しい…