When overloading an unary operators in Scala we should precede the operator name with ‘unary_’. Not doing so we will get an exception when using it. The following code sample shows that.
package il.ac.hit.samples
object Program
{
def main(args: Array[String])
{
val ob = new RationalNumber(1,3)
val other = -ob
println(other)
}
}
class RationalNumber(a:Int,b:Int)
{
require (b!=0,"donominator cannot be 0")
val numerator:Int = a / greatestCommonDivider(a,b)
val denominator:Int = b / greatestCommonDivider(a,b)
private def greatestCommonDivider(m:Int,n:Int):Int =
{
if(n==0) m else greatestCommonDivider(n,m%n)
}
override def toString():String =
{
numerator+"/"+denominator
}
def unary_- :RationalNumber = new RationalNumber(-numerator,denominator)
}
The following video clip overviews this code sample, shows its execution and explains it.







