一个简单的问题,如果这是一个愚蠢的问题,对不起,因为我才刚开始使用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[?]
但是根据此帖子(I have a Scala List, how can I get a TraversableOnce?),scala.collection.immutable.List
是Iterable
,因此也是GenTraversableOnce
。但是,此错误似乎表明并非如此。而且,当我实际查看该帖子的可接受答案中的链接时,我看不到对“可遍历”一词的任何引用。
如果问题与我的内部类不正确有关,那么我必须说此错误非常无用,因为要求内部类的类型为“?”显然是一种虚无的陈述。在理解这一点方面的任何帮助将不胜感激。
答案 0 :(得分: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 }
这正是错误消息要求您执行的操作:提供一个以 tuple 作为参数的 unary 函数,而不是二进制函数。请注意,有一种tupled
方法可以做到这一点。
函数的返回类型在这里基本上无关紧要,编译器无法统一它们,因为它在输入类型上失败。
也相关: