Bug #17216
closedEnumerator::Chain doesn't support all Enumerator methods
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
Updated by jeremyevans0 (Jeremy Evans) over 2 years 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
Updated by nobu (Nobuyoshi Nakada) over 2 years ago
- Has duplicate Feature #17347: Enumerator::Chain of Enumerator::Lazy should be lazy added
Updated by jeremyevans (Jeremy Evans) over 2 years ago
- Status changed from Open to Closed
Applied in changeset git|bf40fe9fed19a5e22081b133661c0629988f1618.
Fix calling enumerator methods such as with_index on Enumerator::Chain
This previously raised a TypeError. Wrap the Enumerator::Chain in
an Enumerator to work around the problem.
Fixes [Bug #17216]