Poniższy przykład pochodzi z książki "Programowanie w Scali". Biorąc pod uwagę klasę „Rational” i następującą definicję metoda:Scala: method operator overloading
def add(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
mogę skutecznie przeciążyć metodę dodawania z wersji convenience że przyjmuje argument int, a korzysta z definicją powyżej:
def add(that: Int): Rational =
add(new Rational(that, 1))
Żadnych problemów do tej pory.
Teraz, jeśli zmienię nazwę metody do nazwy stylu operator:
def +(that: Rational): Rational =
new Rational(
this.numer * that.denom + that.numer * this.denom,
this.denom * that.denom
)
i przeciążeniem tak:
def +(that: Int): Rational =
+(new Rational(that, 1))
otrzymuję następujący błąd kompilacji:
(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
^
Dlaczego kompilator szuka jednolitej wersji metody +
?