diff options
Diffstat (limited to 'mrbgems/mruby-enumerator')
| -rw-r--r-- | mrbgems/mruby-enumerator/mrblib/enumerator.rb | 45 |
1 files changed, 27 insertions, 18 deletions
diff --git a/mrbgems/mruby-enumerator/mrblib/enumerator.rb b/mrbgems/mruby-enumerator/mrblib/enumerator.rb index 912683ed9..1494c02c5 100644 --- a/mrbgems/mruby-enumerator/mrblib/enumerator.rb +++ b/mrbgems/mruby-enumerator/mrblib/enumerator.rb @@ -297,7 +297,7 @@ class Enumerator # side-effect # def next - ary2sv next_values, false + next_values.__svalue end ## @@ -405,7 +405,7 @@ class Enumerator # p e.next #raises StopIteration # def peek - ary2sv peek_values, true + peek_values.__svalue end ## @@ -511,22 +511,6 @@ class Enumerator end # just for internal - def ary2sv args, dup - return args unless args.kind_of? Array - - case args.length - when 0 - nil - when 1 - args[0] - else - return args.dup if dup - args - end - end - private :ary2sv - - # just for internal class Generator def initialize &block raise TypeError, "wrong argument type #{self.class} (expected Proc)" unless block.kind_of? Proc @@ -623,3 +607,28 @@ module Kernel end alias :enum_for :to_enum end + +module Enumerable + # use Enumerator to use inifite sequence + def zip(*arg) + ary = [] + arg = arg.map{|a|a.each} + i = 0 + self.each do |*val| + a = [] + a.push(val.__svalue) + idx = 0 + while idx < arg.size + begin + a.push(arg[idx].next) + rescue StopIteration + a.push(nil) + end + idx += 1 + end + ary.push(a) + i += 1 + end + ary + end +end |
