2012-01-04 9 views
3
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を呼び出すときのコンパイラエラー

答えて

6

は(スカラ< 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 
+0

それは、少なくとも私のREPLでは、ありません。同じエラーが発生します。 – Rogach

+0

あなたは正しいです...コレクションと一緒に作業しました。<2.8 –

+0

> 2.8を追加しました。なぜこのような奇妙な追加情報をコンパイラに与えるべきなのですか? –

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

scala> 
3

:あなたがしなければならない何

def a[A: ClassManifest](b:Seq[A]) = b.toArray 
関連する問題