2016-09-16 2 views
0

Я пытаюсь реализовать метод, который может принимать Seq из Int и Double. Я слышал, что это можно сделать, используя Numeric, но я прочитал об аннотации под названием @specialized в книге Scala.правильное использование @specialized в Scala

Так что я попытался реализации метода следующим

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.

Примечание: Я упростил уравнение для удобочитаемости. Он больше не представляет собой медианный расчет.

ответ

3

Вы просто не можете использовать @specialized для этого. Ваш код по-прежнему должен компилироваться, если @specialized удален; аннотация сообщает компилятору также создавать специализированные версии для T = Int и T = Double. Так что вам все еще нужно Numeric.

(До сих пор, как я понимаю, в данном случае @specialized в основном бесполезно, потому что Seq и Numeric не специализированы.)

Смежные вопросы