gpt4 book ai didi

映射 Map 时 Scala 不匹配

转载 作者:行者123 更新时间:2023-12-02 01:33:45 24 4
gpt4 key购买 nike

我正在使用 Scala (2.9.1) 迈出第一个有趣的步骤(非 hello-world 级别),但我一直在试图理解一条非常无信息的错误消息。它很像这样:

error: type mismatch;
found : (Int, Array[InputEntry]) => (Int, Double)
required: (Int, Array[InputEntry]) => ?
entries.groupBy(grouper).map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))

正如您所猜测的,此代码片段中的进程应该是进行某些处理的地方,它实际上是一个定义良好的函数,具有签名 Array[InputEntry] => Double

Grouper 的签名是 Array[InputEntry] => Int

我尝试提取一个函数并替换 lambda,但它没有用,而且我一直在尝试理解错误中的问号......

有什么想法吗?

编辑:我应该澄清一下,InputEntry 是我定义的一个类,但就这个示例而言,在我看来它几乎不相关。

最佳答案

这看起来像问题:

.map((k: Int, ies: Array[InputEntry]) => (k, doMyStuff(ies)))

您需要使用 case 语句来取消应用参数并将它们分配给局部变量。您还需要使用 {} 而不是 (),因为它现在是匿名函数。

entries.groupBy(grouper).map{case (k, ies) => (k, doMyStuff(ies))}

这是一个更简单的示例。

scala> val x = List(("a",1),("b",2))
x: List[(java.lang.String, Int)] = List((a,1), (b,2))
scala> x.map{ case (str, num) => num }
res5: List[Int] = List(1, 2)

如果您不想使用 case 语句,则必须将元组保留为单个变量。

scala> x.map(tuple => tuple._2)
res6: List[Int] = List(1, 2)

关于映射 Map 时 Scala 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8812338/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com