Fix Enumerable#cycle; ref #1933

* add multi value support
* `each` method may not rewind the sequence so that `cycle` should save elements
This commit is contained in:
Yukihiro "Matz" Matsumoto
2014-03-24 23:58:21 +09:00
parent 915b158e89
commit d7d54b6e69
+19 -3
View File
@@ -548,14 +548,30 @@ module Enumerable
#
def cycle(n=nil, &block)
ary = []
if n == nil
loop {self.each {|val| block.call(val) } }
self.each do|*val|
ary.push val
block.call(*val)
end
loop do
ary.each do|e|
block.call(*e)
end
end
else
raise TypeError, "expected Integer for 1st argument" unless n.kind_of? Integer
unless n.kind_of? Integer
raise TypeError, "expected Integer for 1st argument"
end
self.each do|*val|
ary.push val
end
count = 0
while count < n
self.each {|val| block.call(val) }
ary.each do|e|
block.call(*e)
end
count += 1
end
end