class Calculator[A:Numeric]{
var x:A = _;
def sum() : A = x+x; //error:
}
Run Code Online (Sandbox Code Playgroud)
编译器错误:
class Calculator[A: Numeric]{ ... }
Run Code Online (Sandbox Code Playgroud)
是语法糖
class Calculator[A](implicit n: Numeric[A]){ ... }
Run Code Online (Sandbox Code Playgroud)
如果您查看文档,Numeric您会发现implicit def mkOrderingOps它使用“丰富我的库”模式来向+类型添加数学运算符A。
您需要mkOrderingOps从 的实例导入Numeric。
保留当前的类签名,您可以用来implicitly[Numeric[A]]获取实例。把它们放在一起,你会得到:
class Calculator[A: Numeric] {
private val n = implicitly[Numeric[A]]
import n._ // mkOrderingOps is included here
var a: A = _
def sum = a + a // the + is coming from the mkOrderingOps conversion
}
Run Code Online (Sandbox Code Playgroud)