Ошибка компилятора при вызове toArray - PullRequest
3 голосов
/ 04 января 2012
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 ]

6 голосов
/ 04 января 2012

Что вам нужно сделать, это указать тип возвращаемого значения, это будет работать (для scala <2.8): </p>

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

Из-за новой платформы Collections, которая должна была выполнять особый вид преобразования в порядкедля обработки массивов, таких как коллекции, см. Fighting bit rot стр. 448, мы должны рассказать о старшем типе, и это значение ClassManifest говорит о классе (есть Manifest, которыйшире).

Итак, оба приведенных ниже примера действительны (более подробная информация здесь Объяснение API коллекций ):

 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
4 голосов
/ 04 января 2012
scala> def a[A : ClassManifest](b:Seq[A]) = b.toArray
a: [A](b: Seq[A])(implicit evidence$1: ClassManifest[A])Array[A]

scala>
3 голосов
/ 04 января 2012

Вам необходимо добавить связанный вид, чтобы предоставить ему манифест:

...