是否可以创建一个自己的数值类型,可以与内置的scala数值类型进行比较,并可能用于混合算术? 例如,假设
class UnsignedInt(private val bits :Int) extends AnyVal {
...
}
我可以使它等于Int
s吗?
虽然我可以定义def ==(that :Int)
(我认为这是不可能的),但我无论如何也无法强制转换以便
val (s, u) = 1 -> new UnsignedInt(1)
s == u
在调用我的自定义比较后产生true,而不是编译器在它运行之前放弃。我一般都知道混合算术的混乱,但是因为这样的比较不会产生编译错误并且通常会直观地编写,我希望至少能够将两个操作数提升到可以安全注入的类型英寸
答案 0 :(得分:0)
在Scala中执行此操作的典型方法是使用隐式转换; this blog post解释得很清楚。把这个想法移植到你的班级将是:
object UnsignedIntImplicits {
implicit def Int2UnsignedInt(value:Int) = new UnsignedInt(value)
}
然后一定要用:
激活它import UnsignedIntImplicits._