Làm cách nào để tạo một lớp học thực hiện các phép toán và so sánh trên bất kỳ loại số nào trong Scala?So sánh với các loại số Scala?
Một cách tiếp cận rõ ràng:
import math.Numeric.Implicits._
class Ops[T : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
kiếm được tôi đây ...
Ops.scala:7: value > is not a member of type parameter T
Hmmm ... chúng ta có thể làm toán với các loại số, nhưng chúng ta không thể so sánh chúng?
Vì vậy, chúng ta hãy cũng nói rằng T
là Ordered[T]
...
class Ops[T <: Ordered[T] : Numeric] {
def add(a: T, b: T) = a + b
def gt(a: T, b: T) = a > b
}
Đó biên dịch. Nhưng hãy thử sử dụng nó?
new Ops[Int].gt(1, 2)
Và tôi nhận được ...
Ops.scala:13: type arguments [Int] do not conform to class Ops's type parameter bounds [T <: Ordered[T]]
Vì vậy, làm thế nào tôi có thể hoạt động trên một số loại được cả hai yêu cầu và số?
Tốt, không nhận thức được loại nhập chung đó ngược lại với nhập địa phương 'numeric.mkXXXOps'. Sẽ sử dụng nó. –
'Số' mở rộng' Thứ tự', do đó yêu cầu một giới hạn ngữ cảnh 'Ordering' là thừa! 'T: Numeric' suffices. –
@Sciss: Bạn nói đúng. Đã chỉnh sửa, cảm ơn. – missingfaktor