Come si può creare una classe che comporti confronti matematici con e su qualsiasi tipo numerico in Scala?Confronti con i tipi numerici di Scala?
Un approccio ovvio:
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 fa guadagnare questo ...
Ops.scala:7: value > is not a member of type parameter T
Hmmm ... si può fare la matematica con i tipi numerici, ma non possiamo confrontarli?
Quindi diciamo anche che è 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
}
che compila. Ma prova ad usarlo?
new Ops[Int].gt(1, 2)
E ho ...
Ops.scala:13: type arguments [Int] do not conform to class Ops's type parameter bounds [T <: Ordered[T]]
Così come posso operare su un certo tipo che è sia ordinato e numerica?
Nice, non era a conoscenza di questo tipo di importazione globale in contrasto con l'importazione locale 'numeric.mkXXXOps'. Lo userà. –
'Numerico' estende' Ordine', quindi chiedere un contesto di 'Ordine' è ridondante! 'T: Numeric' è sufficiente. –
@Sciss: hai ragione. Modificato, grazie. – missingfaktor