Ответ 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]
Они упоминаются здесь и там есть статья о том, как определить их здесь.