From: sawadatsuyoshi@... Date: 2015-12-09T16:15:54+00:00 Subject: [ruby-core:72001] [Ruby trunk - Feature #11797] [Open] `Enumerator#with_object` with multiple objects Issue #11797 has been reported by Tsuyoshi Sawada. ---------------------------------------- Feature #11797: `Enumerator#with_object` with multiple objects https://bugs.ruby-lang.org/issues/11797 * Author: Tsuyoshi Sawada * Status: Open * Priority: Normal * Assignee: ---------------------------------------- Sometimes, when working with `Enumerator#with_object`, I want to keep some additional temporary objects besides the one to return. A use case is as follows (I got this from this StackOverflow question: http://stackoverflow.com/questions/3418123). Suppose I have an enumerator created from an array: e = ["a", "b", "c", "c", "a", "c"].to_enum and want to get an array of its repeated elements in the order they are repeated (i.e., appears for the second time): # => ["c", "a"] I can do it using `Enumerator#with_object` like this: e.to_enum.with_object([{}, []]){|c, (h, a)| h[c] ? a.push(c) : h.store(c, true)}.last.uniq Here, I am getting the array referred to as `a` in the block, but besides that, I am using a temporal hash `h`. I thought it would be nice if `Enumerator#with_object` accepts one or more objects, pass them individually as block arguments, and returns only the last argument so that I can do this: e.to_enum.with_object({}, []){|c, h, a| h[c] ? a.push(c) : h.store(c, true)}.uniq -- https://bugs.ruby-lang.org/