假设我有一个标记类型,例如:
import shapeless.tag.@@
import shapeless.tag
trait VolumeTag
type Volume = Double @@ VolumeTag
def Volume(value: Double): Volume = tag[Volume][Double](value)
[现在,我遇到的问题是,例如,当我添加两个Volume
类型的对象时,会得到一个双精度。如何重新定义+
运算符,以便两个卷的返回值是一个卷?
我曾尝试添加新的特征,例如VolumeOperations
为+
类型的对象重新定义Volume
。但是如果不使用+
,就无法实现.isInstanceOf[Volume]
。
无需铸造就可以实现吗?
您可以定义扩展方法
def Volume(value: Double): Volume = tag[VolumeTag][Double](value)
implicit class VolumeOp(v: Volume) {
//def +(v1: Volume): Volume = Volume(v + v1)
def plus(v1: Volume): Volume = Volume(v + v1)
}
但是tag
实际上是强制转换。