为什么scala.collection.immutable.List [Object]不是GenTraversableOnce [?]

问题描述 投票:0回答:1

简单的问题,对不起,如果这是一个愚蠢的问题,因为我刚刚开始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.ListIterable,因此也是GenTraversableOnce。然而,这个错误似乎表明不是这样。而且,当我实际查看该帖子的接受答案中的链接时,我没有看到任何对“traversable”这个词的引用。

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

scala iterable arity traversable
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 }

这正是错误消息要求您执行的操作:提供一个将元组作为参数而不是二进制函数的一元函数。请注意,有tupled方法,正是如此。

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


还有关系:

  1. 与eta-expansions相同的故事:Why does my implementation of Haskell snd not compile in Scala
© www.soinside.com 2019 - 2024. All rights reserved.