如何使用Scala 2.10隐式类

0__*_*0__ 13 scala implicit scala-2.10

我认为这将正确使用Scala 2.10的新隐式类:

implicit case class IntOps(i: Int) extends AnyVal {
  def twice = i * 2
}

11.twice
Run Code Online (Sandbox Code Playgroud)

显然不是:

<console>:13: error: value twice is not a member of Int
              11.twice
                 ^
Run Code Online (Sandbox Code Playgroud)

我错过了什么(Scala 2.10.0-M6)?

Nic*_*las 21

一个线索是隐含类的消亡,在SIP-13中解释:

implicit class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
Run Code Online (Sandbox Code Playgroud)

将由编译器转换如下:

class RichInt(n: Int) extends Ordered[Int] {
def min(m: Int): Int = if (n <= m) n else m
...
}
implicit final def RichInt(n: Int): RichInt = new RichInt(n)
Run Code Online (Sandbox Code Playgroud)

如您所见,创建的隐式函数与原始类具有相同的名称.我想这样做可以使隐式类更容易导入.

因此,在您的情况下,当您创建隐式案例类时,implicit关键字创建的方法名称与关键字创建的伴随对象之间存在冲突case.