Следующий пример из книги "Программирование в Scala". Учитывая класс "Rational" и следующее определение метода:
def add(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
Я могу успешно перегрузить метод add с помощью удобной версии, которая принимает аргумент Int, а использует определение выше:
def add(that: Int): Rational =
add(new Rational(that, 1))
Пока никаких проблем.
Теперь, если я изменю имя метода на имя стиля оператора:
def +(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
И перегрузитесь так:
def +(that: Int): Rational =
+(new Rational(that, 1))
Я получаю следующую ошибку компиляции:
(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
^
Почему компилятор ищет унарную версию метода +
?