加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

映射Map时Scala不匹配

发布时间:2020-12-16 18:42:09 所属栏目:安全 来源:网络整理
导读:我正在使用 Scala(2.9.1)进行我的第一个有趣的步骤(非hello-world级别),并且我试图理解一个非常无法提供的错误消息. 它很像这样: error: type mismatch;found : (Int,Array[InputEntry]) = (Int,Double)required: (Int,Array[InputEntry]) = ?entries.group
我正在使用 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] =>双.

相反,Grouper的签名是Array [InputEntry] =>诠释.

我试图提取一个函数并替换lambda但它没用,而且我试图理解错误中的问号…

有任何想法吗?

编辑:我应该澄清一下,InputEntry是我定义的一个类,但是为了这个例子,在我看来它似乎并不相关.

解决方法

这看起来像问题:

.map((k: Int,doMyStuff(ies)))

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

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,(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)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读