2012-05-12 41 views
5

मैं इन दो साधारण अंतराल कक्षाओं के बॉयलर-प्लेट-उन्मूलन सुपरक्लास को कैसे परिभाषित करूं?स्कैला रियल इंटरवल, इंट इंटरवल

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) 
} 

मैं

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) 
} 

की कोशिश की लेकिन मिनट और अधिकतमसंघ विधि में संकलन नहीं था (के बाद से संख्या [टी] न्यूनतम/अधिकतम नहीं है)।

आप एक सुंदर सुपर क्लास जिसमें दोनों मध्य और संघ के साथ तरीकों सौदों प्रदान कर सकते हैं एक साफ, कोड-बार और केवल एक बार बॉयलरप्लेट-परहेज तरीका है?

उत्तर

4

मुझे लगता है कि आप 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। बस इसे 2.9.2 में सत्यापित किया और मुझे इसके साथ कोई समस्या नहीं थी। आपका त्रुटि संदेश क्या है? (क्या आप 'आयात संख्या ...' भूल गए थे?) – soc

+0

धन्यवाद बहुत बहुत धन्यवाद! यह पूरी तरह से काम किया। –