Как создать класс, который выполняет математические и сравнения для любого числового типа в 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]]
Так как я могу работать с неким типом, который является как упорядоченным, так и числовым?