在Scala中正确使用@specialized

时间:2016-09-16 07:56:05

标签: scala

我正在尝试实施一种可以接受Seq IntDouble的方法。我听说这可以使用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无法识别+操作,因为类型提示似乎认为TString

注意:为了便于阅读,我简化了等式。它不再代表中位数计算。

1 个答案:

答案 0 :(得分:4)

您根本无法使用@specialized。如果删除@specialized,您的代码仍需编译;注释告诉编译器T = IntT = Double生成专用版本。所以你仍然需要Numeric

(据我所知,在这种情况下,@specialized基本上没用,因为SeqNumeric并非专业。)