我正在尝试实施一种可以接受Seq
Int
和Double
的方法。我听说这可以使用Numeric
来完成,但是我在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
}
}
然而,Scala无法识别+
操作,因为类型提示似乎认为T
是String
。
注意:为了便于阅读,我简化了等式。它不再代表中位数计算。
答案 0 :(得分:4)
您根本无法使用@specialized
。如果删除@specialized
,您的代码仍需编译;注释告诉编译器还为T = Int
和T = Double
生成专用版本。所以你仍然需要Numeric
。
(据我所知,在这种情况下,@specialized
基本上没用,因为Seq
和Numeric
并非专业。)