The following example is from the book 'Programming in Scala'. Given a class 'Rational' and the following method definition:

def add(that: Rational): Rational =
    new Rational(
        this.numer * that.denom + that.numer * this.denom,
        this.denom * that.denom
    )

I can successfully overload the add method with a convenience version that takes an Int argument, and makes use of the definition above:

def add(that: Int): Rational =
    add(new Rational(that, 1))

No problems so far.

Now, if I change the method name to an operator style name:

def +(that: Rational): Rational =
    new Rational(
        this.numer * that.denom + that.numer * this.denom,
        this.denom * that.denom
    )

And overload like so:

def +(that: Int): Rational =
    +(new Rational(that, 1))

I get the following compile error:

(fragment of Rational.scala):19: error: value unary_+ is not a member of this.Rational
+(new Rational(that, 1))
 ^

Why is the compiler looking for a unary version of the + method?

Edit
Report