1
class Calculator[A:Numeric]{
var x:A = _;
def sum() : A = x+x; //error:
}
编译器错误:泛型在斯卡拉此外
- 无法解析+上一个
- 类型不匹配的符号;预期:字符串,实际:一个
class Calculator[A:Numeric]{
var x:A = _;
def sum() : A = x+x; //error:
}
编译器错误:泛型在斯卡拉此外
需要导入数字OPS:
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
}
class Calculator[A: Numeric]{ ... }
是
语法糖class Calculator[A](implicit n: Numeric[A]){ ... }
如果您在the docs for Numeric
中查找,您会发现implicit def mkOrderingOps
,它使用“Enrich my Library”模式将+
等数学运算符添加到A
类型中。
您需要从Numeric
的实例导入mkOrderingOps
。
保留您当前的班级签名,您可以使用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
}