自定义类型和scala内置数字之间的混合算术 - 是否可能?

时间:2017-01-11 23:19:11

标签: scala numbers implicit-conversion

是否可以创建一个自己的数值类型,可以与内置的scala数值类型进行比较,并可能用于混合算术? 例如,假设

class UnsignedInt(private val bits :Int) extends AnyVal {
    ...
}

我可以使它等于Int s吗? 虽然我可以定义def ==(that :Int)(我认为这是不可能的),但我无论如何也无法强制转换以便

val (s, u) = 1 -> new UnsignedInt(1)
s == u

在调用我的自定义比较后产生true,而不是编译器在它运行之前放弃。我一般都知道混合算术的混乱,但是因为这样的比较不会产生编译错误并且通常会直观地编写,我希望至少能够将两个操作数提升到可以安全注入的类型英寸

1 个答案:

答案 0 :(得分:0)

在Scala中执行此操作的典型方法是使用隐式转换; this blog post解释得很清楚。把这个想法移植到你的班级将是:

object UnsignedIntImplicits {
   implicit def Int2UnsignedInt(value:Int) = new UnsignedInt(value) 
}

然后一定要用:

激活它
import UnsignedIntImplicits._