为什么我不能专门研究scala中的泛型函数?

时间:2017-11-09 15:00:23

标签: scala template-specialization specialized-annotation

对于具有以下签名的方法,我收到错误type N is unused or used in non-specializable positions.

protected def offsetFrom0[@specialized(Int,Long) N](offsetFrom1 : Codec[N])(implicit N : Integral[N]) : Codec[N]

有人可以用非专业人的术语向我解释有关专业化的规则是什么吗?

1 个答案:

答案 0 :(得分:2)

@specialized注释只能用于类类型参数。您可以在源文档here中看到它。因此,在您的情况下,您可以采取以下措施:

case class Offset[@specialized(Int, Long) N](offsetFrom1: N) {
    def offsetFrom0: N = ???
}

Offset(1).offsetFrom0
Offset(1L).offsetFrom0