如何創建一個在數學類型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