调用toArray时编译器错误

Rog*_*ach 3 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
                              ^
Run Code Online (Sandbox Code Playgroud)

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

and*_*lla 6

你要做的是指定可返回类型,这将工作(对于scala <2.8):

def a[A](b:Seq[A]):Array[A] = b.toArray
Run Code Online (Sandbox Code Playgroud)

由于新的Collections框架必须进行特殊的转换才能处理像Collections这样的数组,请参阅Fighting bit rot第448页,我们必须告诉高阶类型,它的含义ClassManifest告诉了类(有一个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
Run Code Online (Sandbox Code Playgroud)