是否有可能在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 = ...
}