使函数接受我的基于Int的值类型

时间:2017-04-27 10:23:31

标签: scala types value-type

想象一下以下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))
           ^

我正在寻找一种方法来进行更改Primeinc以允许此函数调用。

1 个答案:

答案 0 :(得分:0)

Prime在运行时只有int,而不是在编译时,因此你需要有一个转换器到int才能发生。

implicit def backToInt(p:Prime): Int = p.self

现在你可以传递inc(new Prime(2)),它会被隐式转换为int。然而,这会破坏价值类型,即类型安全。