2016-09-16 29 views
0

我正在嘗試實現一種方法,該方法可以接受IntDoubleSeq。我聽說這可以使用Numeric完成,但是我在Scala書中讀到了一個名爲@specialized的註釋。在Scala中正確使用@specialized

所以,我想實現的方法如下

def getMedian[@specialized(Int, Double) T](s:Seq[T]):T = { 
    s.sorted match { 
    case y:Seq[T] if (y.length % 2 == 0) => y(0) + y(1)/2 
    } 
} 

但是由於類型提示似乎認爲TString斯卡拉不承認+操作。

注:我簡化了等式的可讀性。它不再代表中位數計算。

回答

3

您根本無法使用@specialized。如果@specialized被移除,您的代碼仍然需要編譯;註釋告知編譯器生成T = IntT = Double的專用版本。所以你仍然需要Numeric

(到目前爲止,我明白了,在這種情況下@specialized基本上是無用的,因爲SeqNumeric不是專業。)