调用toArray时编译器错误

时间:2012-01-04 14:51:03

标签: 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
                              ^

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

3 个答案:

答案 0 :(得分:6)

你要做的是指定可退回的类型,这将起作用(对于scala&lt; 2.8):

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

由于新的Collections框架必须进行特殊的转换才能处理像Collections这样的数组,请参阅Fighting bit rot第448页,我们必须告诉高阶类型,它的含义是{ {1}}讲述了课程(有一个ClassManifest更宽)。

因此,以下两个示例均有效(此处提供更多信息Collections API Explained):

Manifest

答案 1 :(得分:4)

scala> def a[A : ClassManifest](b:Seq[A]) = b.toArray
a: [A](b: Seq[A])(implicit evidence$1: ClassManifest[A])Array[A]

scala>

答案 2 :(得分:3)

您需要添加一个视图绑定,以便为其提供清单:

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