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

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

问题描述:

我创建了一个ComplexNumber类。我希望能够像做是否有可能在scala中重载原始数值类型的运算符?

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

但这需要重载*对于int,double等这可能吗?

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

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 = ... 
}