class Calculator[A:Numeric]{
var x:A = _;
def sum() : A = x+x; //error:
}
编译错误:
答案 0 :(得分:4)
class Calculator[A: Numeric]{ ... }
是
的语法糖class Calculator[A](implicit n: Numeric[A]){ ... }
如果你查看the docs for Numeric
,你会发现使用“丰富我的资源库”模式的implicit def mkOrderingOps
将+
等数学运算符添加到A
类型。< / p>
您需要从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
}
答案 1 :(得分:2)
您需要导入数字操作:
class Calculator[A : Numeric] {
val numeric = implicitly[Numeric[A]]
import numeric._
var x: A = _
def sum(): A = x + x
}
相当于:
class Calculator[A](implicit numeric: Numeric[A]) {
import numeric._
var x: A = _
def sum(): A = x + x
}