为什么Scala 2.9.1没有意识到NodeSeq也是GenTraversableOnce

时间:2011-12-07 02:52:49

标签: scala

我一直收到这个错误:

[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 个答案:

答案 0 :(得分:2)

您可以确认您的功能是Function2[NodeSeq, Int, GenTraversableOnce[_]]还是Function1[(NodeSeq, Int), GenTraversableOnce[_]]?如果它是前者,那可能是你的问题,因为zipWithIndex会产生元组。答案就是:

answers.zipWithIndex.flatMap(answerElem.tupled)

我做了一个带有非故障功能的实验,并重现了类似你的问题,并用上面的方法修复了它。虽然不是最有用的错误消息...

答案 1 :(得分:1)

我怀疑这是因为编译器试图解析两个隐式CanBuildFrom ,并且找不到两者的合适对。分离zipWithIndex和flatMap似乎允许编译器为每个正确解析CanBuildFrom。

{ val zip = answers.zipWithIndex; zip.flatMap(answerElem) }