W jaki sposób można utworzyć klasę, która analizuje matematykę i na dowolnym typie liczbowym w Scali?Porównania z typami numerycznymi Scali?
Oczywistym podejście:
import math.Numeric.Implicits._
class Ops[T : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
mi zarabia to ...
Ops.scala:7: value > is not a member of type parameter T
Hmmm ... możemy zrobić matematyki z typów liczbowych, ale nie można ich porównać?
Warto więc również powiedzieć, że T
jest Ordered[T]
...
class Ops[T <: Ordered[T] : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
To kompiluje. Ale spróbuj go użyć?
new Ops[Int].gt(1, 2)
I dostać ...
Ops.scala:13: type arguments [Int] do not conform to class Ops's type parameter bounds [T <: Ordered[T]]
Więc jak mogę działać na jakiś rodzaj, który jest zarówno uporządkowany i numerycznej?
Miło, nie był świadomy tego rodzaju globalnego importu w przeciwieństwie do lokalnego importu 'numeric.mkXXXOps'. Użyje tego. –
'Numeric' rozszerza' Ordering', więc prośba o ograniczenie kontekstu 'Ordering' jest zbędna! "T: numeryczne" wystarcza. –
@Siss: Masz rację. Edytowane, dzięki. – missingfaktor