def to_h(&block)
      pairs = members.zip(@values)
      if block_given?
        Hash[pairs.map(&block)]
      else
        Hash[pairs]
      end
    end
def to_h(&block)
      pairs = members.zip(@values)
      if block_given?
        Hash[pairs.map(&block)]
      else
        Hash[pairs]
      end
    end
@overload to_h()
   Returns a Hash containing the names and values for the struct's attributes
   @return [{Symbol => any}]

 @overload to_h(&block)
   Applies block to pairs of name name and value and use them to construct hash
   @yieldparam pair [<Symbol, any>] yields pair of name name and value
   @return [{Symbol => any}]

 @example
   User = Fear::Struct.new(:id, :email, :admin)
   john = User.new(email: 'john@example.com', admin: false, id: 2)
   john.to_h #=> {id: 2, email: 'john@example.com', admin: false}
   john.to_h do |key, value|
     [key.to_s, value]
   end #=> {'id' => 2, 'email' => 'john@example.com', 'admin' => false}