🔥

[Bug #20623] Enumerator::Lazy#zip に関するバグ報告

2024/07/22に公開

[Bug #20623] Unexpected behavior of blocks in Enumerator::Lazy#zip

  • 以下のように lazyzip したときの挙動が異なるというバグ報告
# lazy しない場合
pp [1].zip([2]).map { _1 }
# => [[1, 2]]

# Enumerator::Lazy#zip 経由で map した場合
pp [1].lazy.zip([2].lazy).map { _1 }.force
# => [1]

pp [1].lazy.zip([2].lazy).force.map { _1 }
# => [[1, 2]]
  • lazy した後に map した場合は 1 になるんですが force したあとに map すると [1, 2] になります
  • 期待する挙動としては [1, 2] になりそうですね
  • この不具合はすでに修正済みで以下のようになります
# Enumerator::Lazy#zip 経由で map した場合
pp [1].lazy.zip([2].lazy).map { _1 }.force
# Ruby 3.3 => [1]
# Ruby 3.4 => [[1, 2]]
  • バグ修正なので Ruby 3.3.x の安定版でリリースされるかも?
GitHubで編集を提案

Discussion