def zip(*others)
      others = others.map { |other| Erlang.from(other) }
      if block_given?
        return super(*others)
      else
        return self.class.new(super(*others))
      end
    end
def zip(*others)
      others = others.map { |other| Erlang.from(other) }
      if block_given?
        return super(*others)
      else
        return self.class.new(super(*others))
      end
    end
Combine two tuples by "zipping" them together. `others` should be arrays
 and/or tuples. The corresponding elements from this `Tuple` and each of
 `others` (that is, the elements with the same indices) will be gathered
 into arrays.

 If `others` contains fewer elements than this tuple, `nil` will be used
 for padding.

 @overload zip(*others)
   Return a new tuple containing the new arrays.

   @return [Tuple]

 @overload zip(*others)
   @yield [pair] once for each array
   @return [nil]

 @example
   t1 = Erlang::Tuple["A", "B", "C"]
   t2 = Erlang::Tuple[1, 2]
   t1.zip(t2)
   # => Erlang::Tuple[["A", 1], ["B", 2], ["C", nil]]

 @param others [Array] The arrays/tuples to zip together with this one
 @return [Tuple]