Почему Scala 2.9.1 не понимает, что NodeSeq также является GenTraversableOnce - PullRequest
3 голосов
/ 07 декабря 2011

Я получаю эту ошибку:

[error]  found   : (scala.xml.NodeSeq, Int) => scala.xml.NodeSeq
[error]  required: (scala.xml.NodeSeq, Int) => scala.collection.GenTraversableOnce[?]
[error]       { answers.zipWithIndex.flatMap(answerElem) }
[error]                                      ^
[error] one error found

answers - это просто List[NodeSeq], а answerElem просто проверяет индекс и устанавливает атрибут для элемента.Как видите, его параметры имеют правильный тип, и NodeSeq говорит, что он расширяет GenTraversableOnce.

Есть ли подсказка, которую я должен дать, чтобы помочь скомпилировать?

Тодд

Ответы [ 2 ]

2 голосов
/ 07 декабря 2011

Можете ли вы подтвердить, что ваша функция имеет тип Function2[NodeSeq, Int, GenTraversableOnce[_]] или Function1[(NodeSeq, Int), GenTraversableOnce[_]]? Если это первое, это может быть вашей проблемой, потому что zipWithIndex производит кортежи. Тогда ответ будет:

answers.zipWithIndex.flatMap(answerElem.tupled)

Я провел эксперимент с ненулевой функцией, воспроизвел что-то вроде вашей проблемы и исправил ее с помощью вышеописанного. Не самое полезное сообщение об ошибке ...

1 голос
/ 07 декабря 2011

Я подозреваю, что это из-за того, что компилятор пытается разрешить два неявных CanBuildFrom , и подходящая пара не может быть найдена для обоих. Разделение zipWithIndex и flatMap, похоже, позволяет компилятору правильно разрешить CanBuildFrom для каждого.

{ val zip = answers.zipWithIndex; zip.flatMap(answerElem) }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...