0

简单的问题,对不起,如果这是一个愚蠢的问题,因为我刚刚开始在 scala 中。我收到一个类型不匹配错误,上面写着:

found   : (AnyRef, org.apache.tinkerpop.gremlin.hadoop.structure.io.VertexWritable) => List[Object]
required: ((AnyRef, org.apache.tinkerpop.gremlin.hadoop.structure.io.VertexWritable)) => scala.collection.GenTraversableOnce[?]

但是根据这篇文章(我有一个 Scala 列表,我怎样才能得到一个 TraversableOnce?), ascala.collection.immutable.List是 anIterable因此也是 a GenTraversableOnce。然而,这个错误似乎表明并非如此。此外,当我实际查看该帖子的已接受答案中的链接时,我没有看到对“可遍历”一词的任何引用。

如果问题与我的内部类不正确有关,那么我不得不说这个错误非常无信息,因为要求内部类的类型为“?” 显然是一个空洞的陈述......理解这一点的任何帮助将不胜感激。

4

1 回答 1

3

Function2[X, Y, Z]不是一回事Function1[(X, Y), Z]

比较这两个定义:

val f: ((Int, Int)) => Int = xy => xy._1 + xy._2
val f: (Int, Int) => Int = (x, y) => x + y

第一个也可以用模式匹配来编写,它首先分解元组:

val f: ((Int, Int)) => Int = { case (x, y) => x + y }

这正是错误消息要求您执行的操作:提供一个以元组作为参数的一元函数,而不是二元函数。请注意,有一个-method 正是这样做的。tupled

函数的返回类型在这里大多无关紧要,编译器无法统一它们,因为它在输入类型上失败。


还有相关的:

  1. 与 eta-expansions 相同的故事:为什么我的 Haskell 实现snd不能在 Scala 中编译
于 2018-09-10T08:39:16.620 回答