想象一下以下Scala值类型:
class Prime(val self: Int) extends AnyVal {
def +(i: Int): Int = self+i
}
如何让我的功能inc
接受Prime
作为其参数,还可以接受任何常规Int
?
def inc(i: Int): Int = i + 1
现在,我收到以下类型错误:
scala> inc(new Prime(2))
<console>:10: error: type mismatch;
found : Prime
required: Int
inc(new Prime(2))
^
我正在寻找一种方法来进行更改Prime
或inc
以允许此函数调用。
答案 0 :(得分:0)
Prime
在运行时只有int
,而不是在编译时,因此你需要有一个转换器到int才能发生。
implicit def backToInt(p:Prime): Int = p.self
现在你可以传递inc(new Prime(2))
,它会被隐式转换为int。然而,这会破坏价值类型,即类型安全。