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
^
這裏有什麼問題?我該如何解決這個問題?調用toArray時編譯器出錯
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
^
這裏有什麼問題?我該如何解決這個問題?調用toArray時編譯器出錯
,你所要做的就是指定可回收型,這將工作(斯卡拉< 2.8):
def a[A](b:Seq[A]):Array[A] = b.toArray
由於新的集合框架,必須做特殊的轉換,以處理數組一樣集合看到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
scala> def a[A : ClassManifest](b:Seq[A]) = b.toArray
a: [A](b: Seq[A])(implicit evidence$1: ClassManifest[A])Array[A]
scala>
您需要添加約束向它提供清單視圖:
def a[A: ClassManifest](b:Seq[A]) = b.toArray
沒有,至少在我的REPL。給出同樣的錯誤。 – Rogach 2012-01-04 15:09:46
哎呀,你是對的......它與集合工作<2.8 – 2012-01-04 15:14:59
所以我加入了> = 2.8,爲什麼它應該被賦予這樣奇怪的額外信息給編譯器 – 2012-01-04 15:27:33