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]()
  }

此后添加了 @specialized 注释以规避https://issues.scala-lang.org/browse/SI-6967。即 scala 2.10 中的一个错误,其中原始类型可能无法进行模式匹配。

但是,编译器给了我以下错误:

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

这很奇怪,因为 v: T 在专门的实现中应该是一个双类型变量(而不是 Any)。我哪里做错了?

4

0 回答 0