👌

[Bug #21142] .take(0).each_with_index しても空の配列が返ってこないバグ報告

2025/02/22に公開

[Bug #21142] Lazy enumerator .each_with_index ignores .take(0) before it

  • .take(0) をすると当然、空配列を返す
pp [1, 2, 3].take(0)
# => []
  • これが #lazy + #each_with_index を経由すると空配列を返さなくなるというバグ報告
# OK: こっちは空配列を返す
pp [1, 2, 3].lazy.take(0).to_a            # => []
pp [1, 2, 3].lazy.take(0).map { _1 }.to_a # => []

# NG: 空配列ではない
pp [1, 2, 3].lazy.take(0).each_with_index.to_a
# => [[1, 0], [2, 1], [3, 2]]
  • この挙動は Ruby 3.2 から再現しているみたいですね
pp [1, 2, 3].lazy.take(0).each_with_index.to_a
# Ruby 3.1 => []
# Ruby 3.2 => [[1, 0], [2, 1], [3, 2]]
  • あと #take#each_with_index を逆にすると空配列が返ってくるみたいですね
pp [1, 2, 3].lazy.each_with_index.take(0).to_a
# => []
GitHubで編集を提案

Discussion