2012-05-12 47 views
5

Làm cách nào để xác định siêu lớp loại bỏ tấm lò hơi của hai lớp Khoảng thời gian đơn giản này?Khoảng thời gian thực Scala, Khoảng thời gian Int

class IntInterval(val from: Int, val to: Int) { 
    def mid: Double = (from+to)/2.0 
    def union(other: IntInterval) = IntInterval(from min other.from, to max other.to) 
} 

class DoubleInterval(val from: Double, val to: Double) { 
    def mid: Double = (from+to)/2.0 
    def union(other: DoubleInterval) = DoubleInterval(from min other.from, to max other.to) 
} 

tôi đã cố gắng

class Interval[T <: Number[T]] (val from: T, val to: T) { 
    def mid: Double = (from.doubleValue+to.doubleValue)/2.0 
    def union(other: IntInterval) = Interval(from min other.from, to max other.to) 
} 

nhưng phútmax không biên dịch trong phương pháp đoàn (kể từ Số [T] không có min/max).

Bạn có thể cung cấp một lớp cha tao nhã mà những giao dịch với cả giữađoàn phương pháp trong một gọn gàng, mã-once và chỉ một lần cách soạn sẵn-tránh?

Trả lời

4

Tôi nghĩ rằng bạn đang tìm kiếm scala.math.Numeric typeclass:

class Interval[T] (val from: T, val to: T)(implicit num: Numeric[T]) { 
    import num.{mkNumericOps, mkOrderingOps} 

    def mid: Double = (from.toDouble + to.toDouble)/2.0 
    def union(other: Interval[T]) = new Interval(from min other.from, to max other.to) 
} 
+0

mhhh. Chỉ cần xác minh nó trong 2.9.2 và tôi không có vấn đề với nó. Thông báo lỗi của bạn là gì? (Bạn đã quên 'nhập num ...'?) – soc

+0

cảm ơn bao giờ hết! Nó hoạt động hoàn hảo. –

Các vấn đề liên quan