我在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)。我哪里做错了?