2

私はscalaに次の関数を持っています。それを使用して、トラバース可能を配列に変換し、トラバース可能でないものを配列でラップします。

  def asArray[@specialized(scala.Int, scala.Long, scala.Float, scala.Double/*, scala.AnyRef*/) T <: Any : ClassTag](obj: Any): Array[T] = obj match {
    case v: TraversableOnce[T] => v.toArray
    case v: Array[T] => v
    case v: T => Array[T](v)
    case _ => Array[T]()
  }

https://issues.scala-lang.org/browse/SI-6967を回避するために @specialized アノテーションが追加されました。つまり、プリミティブ型がパターン マッチングに失敗する可能性がある scala 2.10 のバグです。

ただし、コンパイラは次のエラーを表示しました。

Error:(167, 27) type mismatch;
 found   : Any
 required: Double
    case v: T => Array[T](v)
                          ^

v: T は特殊な実装では (Any ではなく) double 型の変数である必要があるため、これは奇妙です。私はどこで間違ったのですか?

4

0 に答える 0