是否有可能为scala中的原始数字类型重载运算符?

时间:2017-08-24 06:23:28

标签: scala operator-overloading primitive-types

我创建了一个ComplexNumber课程。我希望能够做类似

的事情

val c = ComplexNumber(1,3); 3 * c;

但是这需要为int,double等重载*。这可能吗?

1 个答案:

答案 0 :(得分:4)

您需要为要操作的每种类型定义隐式转换。一个方便的地方是配套对象。

object ComplexNumber {
  import scala.language.implicitConversions
  implicit def i2cn(i:Int):ComplexNumber = new ComplexNumber(....
}

只要将3 * c方法定义为*类的一部分,ComplexNumber就可以正常工作。

class ComplexNumber(a:Int, b:Int) {
  def *(cn:ComplexNumber): ComplexNumber = ...
}