如何创建一个在数学类型Scala中进行数学运算和比较的类?与Scala的数字类型比较?
一个明显的方法:
import math.Numeric.Implicits._
class Ops[T : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
荣获我这...
Ops.scala:7: value > is not a member of type parameter T
嗯...我们可以做的数学与数字类型,但我们不能对它们进行比较?
所以,让我们也说T
是Ordered[T]
...
class Ops[T <: Ordered[T] : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
,编译。但尝试使用它?
new Ops[Int].gt(1, 2)
我得到...
Ops.scala:13: type arguments [Int] do not conform to class Ops's type parameter bounds [T <: Ordered[T]]
所以,我怎么能对某些类型的这既是有序和数字操作?
不错,没有意识到这种全局导入与本地导入'numeric.mkXXXOps'形成鲜明对比。将使用该。 –
'Numeric'扩展了'Ordering',所以要求'Ordering'上下文边界是多余的! “T:数字”就足够了。 –
@Sciss:你说得对。编辑,谢谢。 – missingfaktor