Das folgende Beispiel stammt aus dem Buch "Programming in Scala". Bei einer Klasse ‚Rational‘ und die folgende Methode Definition:Scala: method operator overloading
def add(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
kann ich überlasten erfolgreich das Add-Methode mit einer Komfort-Version, die ein Int-Argument, und nutzt die Definition oben:
def add(that: Int): Rational =
add(new Rational(that, 1))
Keine Probleme bisher.
Nun, wenn ich ändere den Namen der Methode an einen Operator Artnamen:
def +(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
Und Überlastung wie so:
def +(that: Int): Rational =
+(new Rational(that, 1))
erhalte ich den folgenden Compiler-Fehler:
(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
^
Warum sucht der Compiler nach einer unären Version der +
-Methode?