Project

General

Profile

Bug #17216

Enumerator::Chain doesn't support all Enumerator methods

Added by jeremie (Jérémie Laval) about 2 months ago. Updated 5 days ago.

Status:
Open
Priority:
Normal
Assignee:
-
Target version:
-
ruby -v:
ruby 2.7.1p83 (2020-03-31 revision a0c7c23c9c) [x86_64-darwin19]
[ruby-core:100302]

Description

Despite the fact that Enumerator::Chain (returned by Enumerator#chain) is supposed to inherit from Enumerator, a lot of Enumerator methods do not work on a chain instance throwing the following error:

TypeError (wrong argument type chain (expected enumerator))

The following code exhibit the problem:

[1, 2, 3].chain([4, 5, 6]).with_index.to_a

A workaround is to use each (also work with map, to_enum, and others) to force a conversion back to a plain enumerator which seems superfluous:

[1, 2, 3].chain([4, 5, 6]).each.with_index.to_a

Related issues

Has duplicate Ruby master - Feature #17347: Enumerator::Chain of Enumerator::Lazy should be lazyOpenActions

Updated by jeremyevans0 (Jeremy Evans) 5 days ago

I agree that calling the methods directly should work. I've submitted a pull request to internally wrap the Enumerator::Chain in an Enumerator so it doesn't raise TypeError: https://github.com/ruby/ruby/pull/3811

#2

Updated by nobu (Nobuyoshi Nakada) 3 days ago

  • Has duplicate Feature #17347: Enumerator::Chain of Enumerator::Lazy should be lazy added

Also available in: Atom PDF