Ответ 1

Это унарные методы + и -. Они вызывается, когда вы пишете -object или +object. Синтаксис +x, например, заменяется на [email protected].

Рассмотрим это:

class Foo
  def +(other_foo)
    puts 'binary +'
  end

  def [email protected]
    puts 'unary +'
  end
end

f = Foo.new
g = Foo.new

+ f   
# unary +

f + g 
# binary +

f + (+ g) 
# unary +
# binary +

Еще один надуманный пример:

class Array
  def [email protected]
    map(&:[email protected])
  end
end

- [1, 2, -3]
# => [-1, -2, 3]

Они упоминаются здесь и там есть статья о том, как определить их здесь.