🐕

[Bug #19231] 0.step(Float::INFINITY) で値を取得するときに意図しない挙動になっているバグ報告

2024/08/04に公開

[Bug #19231] Integer#step and Float::INFINITY - inconsistent behaviour when called with and without a block

  • 0.step(Float::INFINITY) に対して値を取得するときに取得の仕方によって返ってくる値が異なるバグ報告
  • take を経由して値を取得する場合は Float が返ってくる
pp 0.step(Float::INFINITY).take(1)
# => [0.0]
  • 一方でブロック引数で値を取得する場合は Integer が返ってくる
pp 0.step(Float::INFINITY) { break _1 }
# => 0
  • #step の引数が有限数だった場合は Float が返ってくる
pp 0.step(100.0).take(1)
# => [0.0]

pp 0.step(100.0) { break _1 }
# => 0.0
  • また #first の場合は以下のような挙動になる
# 無限の場合も有限の場合も Integer を返す
pp 0.step(Float::INFINITY).first   # => 0
pp 0.step(100.0).first             # => 0

# 引数がある場合は Float を返す
pp 0.step(Float::INFINITY).first(1)   # => [0.0]
pp 0.step(100.0).first(1)             # => [0.0]
GitHubで編集を提案

Discussion