1, "b" -> 2, -6ren">
gpt4 book ai didi

function - scala匿名函数问题

转载 作者:行者123 更新时间:2023-12-03 18:15:09 24 4
gpt4 key购买 nike

我正在尝试在 Scala 中过滤从字符串到整数的映射,但遇到了一个奇怪的问题。

如果我将以下内容放入 REPL:

scala> val myMap = Map("a" -> 1, "b" -> 2, "c" -> 3)
myMap: scala.collection.immutable.Map[java.lang.String,Int] =
| Map(a -> 1, b -> 2, c -> 3)

到目前为止一切正常,这有效......
scala> myMap.filter(_._2 > 1)
res9: scala.collection.immutable.Map[java.lang.String,Int] = Map(b -> 2, c -> 3)

但这失败了......
scala> myMap.filter((k:java.lang.String, v:Int) => v > 1)
<console>:9: error: type mismatch;
found : (java.lang.String, Int) => Boolean
required: ((java.lang.String, Int)) => Boolean
myMap.filter((k:java.lang.String, v:Int) => v > 1)

我的问题是错误消息和额外的一对括号是怎么回事?如果我尝试放入一组额外的括号,则会出现错误:不是合法的形式参数。

最佳答案

myMap.filter期望类型为 Tuple2[String, Int] => Boolean 的函数,相当于 ((String, Int)) => Boolean .你传递给它一个 (String, Int) => Boolean 类型的函数;也就是说,一个函数接受两个参数而不是单个 Tuple2 .

让它工作的两种方法:

 myMap.filter { case (k, v) => v > 1 }


 myMap.filter(Function.tupled((k, v) => v > 1))

第一个通过模式匹配工作,第二个通过转换函数 (String, Int) => Boolean((String, Int)) => Boolean .

顺便说一下,已经有关于统一元组和函数参数列表的讨论。也许在 Scala 的 future 版本中,所有函数都将采用单个参数(可能是元组)。

关于function - scala匿名函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154175/

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