instance method
Enumerator::Lazy#zip
[Elem2] (::_Each[Elem2] enum) -> ::Array[[ Elem, Elem2? ]]
(::_Each[untyped], *::_Each[untyped]) -> ::Array[::Array[untyped]]
[Elem2] (::_Each[Elem2]) { ([ Elem, Elem2? ]) -> void } -> nil
(::_Each[untyped], *::_Each[untyped]) { (::Array[untyped]) -> void } -> nil
lazy.zip(arg, ...) → lazy_enumerator
lazy.zip(arg, ...) { |arr| block } → nil
enumerator.c
View on GitHub ↗
static VALUE
lazy_zip(int argc, VALUE *argv, VALUE obj)
{
VALUE ary, v;
long i;
const lazyenum_funcs *funcs = &lazy_zip_funcs[1];
if (rb_block_given_p()) {
return rb_call_super(argc, argv);
}
ary = rb_ary_new2(argc);
for (i = 0; i < argc; i++) {
v = rb_check_array_type(argv[i]);
if (NIL_P(v)) {
for (; i < argc; i++) {
if (!rb_respond_to(argv[i], id_each)) {
rb_raise(rb_eTypeError, "wrong argument type %"PRIsVALUE" (must respond to :each)",
rb_obj_class(argv[i]));
}
}
ary = rb_ary_new4(argc, argv);
funcs = &lazy_zip_funcs[0];
break;
}
rb_ary_push(ary, v);
}
return lazy_add_method(obj, 0, 0, ary, ary, funcs);
}
Like Enumerable#zip, but chains operation to be lazy-evaluated. However, if a block is given to zip, values are enumerated immediately.