在Scala中正确使用@specialized

在Scala中正确使用@specialized,scala,Scala,我正在尝试实现一个可以接受Int和Double的Seq的方法。我听说这可以用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无

我正在尝试实现一个可以接受Int和Double的Seq的方法。我听说这可以用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是字符串

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

您不能使用@specialized。如果删除@specialized,您的代码仍然需要编译;注释告诉编译器也为T=Int和T=Double生成专门的版本。所以你仍然需要数字

据我所知,在这种情况下,@specialized基本上是无用的,因为Seq和Numeric不是专门的。

你不能用@specialized来做这个。如果删除@specialized,您的代码仍然需要编译;注释告诉编译器也为T=Int和T=Double生成专门的版本。所以你仍然需要数字

据我所知,在这种情况下@specialized基本上是无用的,因为Seq和Numeric不是专门的