# File lib/backports/2.0.0/enumerable/lazy.rb, line 177
      def zip(*args)
        return super if block_given?
        arys = args.map{ |arg| Backports.is_array?(arg) }
        if arys.all?
          # Handle trivial case of multiple array arguments separately
          # by avoiding Enumerator#next for efficiency & compatibility
          Lazy.new(self) do |yielder, *values|
            data = yielder.backports_memo ||= {:iter => 0}
            values = values.first unless values.size > 1
            yielder << arys.map{|ary| ary[data[:iter]]}.unshift(values)
            data[:iter] += 1
          end
        else
          args.each do |a|
            raise TypeError, "wrong argument type #{a.class} (must respond to :each)" unless a.respond_to? :each
          end
          Lazy.new(self) do |yielder, *values|
            enums = yielder.backports_memo ||= args.map(&:to_enum)
            values = values.first unless values.size > 1
            others = enums.map do |arg|
              begin
                arg.next
              rescue StopIteration
                nil
              end
            end
            yielder << others.unshift(values)
          end
        end.__set_inspect :zip, args
      end