El siguiente ejemplo es del libro 'Programación en Scala'. Dada una clase de 'racional' y la siguiente definición del método:Scala: método sobrecarga del operador
def add(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
puedo sobrecargar con éxito el método add con una versión de conveniencia que toma un argumento int y hace uso de la definición anterior:
def add(that: Int): Rational =
add(new Rational(that, 1))
Sin problemas hasta el momento.
Ahora, si cambio el nombre del método a un nombre de estilo operador:
def +(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
y la sobrecarga de este modo:
def +(that: Int): Rational =
+(new Rational(that, 1))
me sale el siguiente error de compilación:
(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
^
¿Por qué el compilador busca una versión única del método +
?