scala - 调用 toArray 时编译器错误

标签 scala scala-collections

scala> def a[A](b:Seq[A]) = b.toArray
<console>:7: error: could not find implicit value 
                    for evidence parameter of type ClassManifest[A]
       def a[A](b:Seq[A]) = b.toArray
                              ^

这里有什么问题?我该如何解决这个问题?

最佳答案

您需要做的是指定可返回类型,这将起作用(对于 scala < 2.8):

def a[A](b:Seq[A]):Array[A] = b.toArray

由于新的集合框架必须进行特殊类型的转换才能处理像集合这样的数组,请参阅 Fighting bit rot第448页,要讲高阶类型,就是ClassManifest的意思它讲述了类(class)(有一个更宽的 Manifest)。

所以下面的两个例子都是有效的(更多信息在这里 Collections API Explained ):
 def a[A](b:Seq[A])(implicit m:ClassManifest[A]):Array[A] = b.toArray

 def a[A:ClassManifest](b:Seq[A]):Array[A] = b.toArray

关于scala - 调用 toArray 时编译器错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8728786/

相关文章:

java - 从不同的 gradle 模块导入类

scala - Haskell 和 Scala 中的 `Right 5`

scala - 如何分页输出 spark-shell

scala - 如何将无类型的 java.util.List 转换为 Scala 2.8 缓冲区

Scala 2.8 突破

scala - 我可以在 Scala 中没有包私有(private)类吗?

scala - Akka HTTP API路由结构

scala-使用 "diverging implicit expansion"时出现令人困惑的 "sortBy"错误

scala - 是否可以在 Scala 中打印函数的定义

scala - Scala 中的元组和列表[Any] 之间的区别?