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.

Leave a Reply

Your email address will not be published. Required fields are marked *