def sort_by
      return sort unless block_given?
      block = ->(x) { Erlang.from(transformer.call(x)) }
      array = super(&block)
      return self.class.new(array)
    end
def sort_by
      return sort unless block_given?
      block = ->(x) { Erlang.from(transformer.call(x)) }
      array = super(&block)
      return self.class.new(array)
    end
Return a new `Tuple` with the same elements, but sorted. The sort order is
 determined by mapping the elements through the given block to obtain sort
 keys, and then sorting the keys according to their natural sort order
 (`#<=>`).

 @yield [element] Once for each element.
 @yieldreturn a sort key object for the yielded element.
 @example
   Erlang::Tuple["Elephant", "Dog", "Lion"].sort_by { |e| e.size }
   # => Erlang::Tuple["Dog", "Lion", "Elephant"]

 @return [Tuple]