【问题标题】:Why is scala.collection.immutable.List[Object] not GenTraversableOnce[?]为什么 scala.collection.immutable.List[Object] 不是 GenTraversableOnce[?]
【发布时间】:2019-02-14 15:42:51
【问题描述】:

简单的问题,如果这是一个愚蠢的问题,我很抱歉,因为我刚刚开始使用 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。然而,这个错误似乎表明并非如此。此外,当我实际查看该帖子的已接受答案中的链接时,我没有看到对“可遍历”一词的任何引用。

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

【问题讨论】:

    标签: scala iterable arity traversable


    【解决方案1】:

    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-方法正是这样做的。

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


    也相关:

    1. 与 eta 扩展相同:Why does my implementation of Haskell snd not compile in Scala

    【讨论】:

    • @Paul 换句话说,List TraversableOnce,问题不在于。问题是您提供了一个带有 two 参数的函数,而代码需要一个带有 single 参数的函数,它是 2 的元组b>(注意错误消息中的括号)。
    • @Zoltán 请注意,Paul 不会收到通知,因为他没有参加此答案下的 cmets。但是,是的,问题标题和问题主体本质上都与实际问题无关。我唯一希望以后找到它是通过arity标签和手动添加的“实际相关”链接......
    • @Zoltán 谢谢你的回答。我明白你的意思,尽管从 ((Int, Int)) 到 (Int, Int) 的简单转换并不令人惊讶。实际上,这个映射似乎正是规范投影图;即在产品空间中采用具有范围的多对一函数并将其与多个一对一函数的乘积一对一映射的映射。这似乎可以自动解释
    • @Paul 当谈到((Int, Int))(Int, Int) 的区别时,它看起来很简单。一旦你重载了带有泛型参数A 的方法,它可以匹配Int(Int, Int),或者当你有更高种类的统一时,它看起来就不再那么简单了,这又更困难了。 ..
    • @Paul 如果这完全回答了您的问题,那么您可以mark the question is solved。或者,请告诉我们您还想知道什么。
    猜你喜欢
    • 1970-01-01
    • 2011-01-12
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2012-06-02
    • 1970-01-01
    相关资源
    最近更新 更多