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.