3

オブジェクトにこのメソッドがありpackageます:

def extractLoop[@specialized T](x: Map[T, T]) = {
    val whatever = x.head
    val stop = whatever._1
    def iteration(
            acc: Seq[T] = Seq(whatever._1, whatever._2),
            last: T = whatever._2): Seq[T] = {
        val next = x(last)
        if (next == stop) acc
        else iteration(acc :+ next, next)
    }
    iteration()
}

しかし、私はまだ理解できません.なぜコンパイラ(私はバージョン2.9.2を持っています)が言うのtype T is unused or used in non-specializable positions.ですか?

4

1 に答える 1

5

その理由は、単にMap[T, T]特殊化されていない を使用しているためだと思います。

いくつかの例:

scala> class MyMap[A,B]
defined class MyMap
scala> def extractLoop[@specialized T](x: MyMap[T, T]) = {
     |   sys.error("TODO")
     | }
<console>:8: warning: type T is unused or used in non-specializable positions.
       def extractLoop[@specialized T](x: MyMap[T, T]) = {
           ^
extractLoop: [T](x: MyMap[T,T])Nothing

ただし、その 2 つの型パラメーターに特化MyMapしている場合は、警告はありません。

scala> class MyMap[@specialized A,@specialized B]
defined class MyMap
scala> def extractLoop[@specialized T](x: MyMap[T, T]) = {
     |   sys.error("TODO")
     | }
extractLoop: [T](x: MyMap[T,T])Nothing
于 2012-12-13T19:33:11.870 に答える