Feature #5389
openNew method Enumerator#iterate
Description
If we want to iterate over the elements of a enumerable object with multiple blocks, we can use the Enumerator class.
A method 'iterate' is required, we can write it in Ruby:
class Enumerator
def iterate
yield_value = self.next
return_value = yield yield_value
self.feed return_value
self
end
end
Well, here is an example:
array = (1..10).to_a
enum = array.map!
loop do
enum.iterate {|n| n + 10 }
enum.iterate {|n| n * 2 }
enum.iterate {|n| -n }
end
p array # => [11, 4, -3, 14, 10, -6, 17, 16, -9, 20]
We want to map an array: the 1st element use blk1, the 2nd use blk2, the 3rd use blk3...
I think this Enumerator#iterate method is sometimes useful, so would you please introduce it into the language core?
Updated by naruse (Yui NARUSE) about 13 years ago
Enumerator#next is not enough?
Updated by yimutang (Joey Zhou) about 13 years ago
Yui NARUSE wrote:
Enumerator#next is not enough?
array = (1..10).to_a
enum = array.map!
loop do
enum.next {|n| n + 10 }
enum.next {|n| n * 2 }
enum.next {|n| -n }
end
p array # => [nil, nil, nil, nil, nil, nil, nil, nil, nil, nil]
#next needs no blocks. #iterate is a combination of #next and #feed, I think it's useful for External Iterators.
Updated by mame (Yusuke Endoh) over 12 years ago
- Status changed from Open to Assigned
- Assignee set to matz (Yukihiro Matsumoto)