gpt4 book ai didi

scala - 在 Scala 中使用 case 语句破坏元组的规则

转载 作者:行者123 更新时间:2023-12-04 10:19:38 28 4
gpt4 key购买 nike

我有以下代码:

val xs = List(('a', 1), ('a', 2), ('b', 3), ('b', 4))

我想把它转换成 map 。例如 Map('a' -> Seq(1,2), 'b' -> Seq(3,4)) .所以我继续编写转换:
xs.groupBy(_._1) map {
case (k, v) => (k, v.map(_._2))
}

为什么map后面的大括号需要是 { .当我开始时,我认为我可以做到以下几点:
xs.groupBy(_._1).map(case (k, v) => (k, v.map(_._2)))

但这不能编译。

最佳答案

因为 .map method accepts a function

你实际上写的是

map({
case (k, v) => (k, v.map(_._2))
})

{ case (k, v) => (k, v.map(_._2)) }是模式匹配匿名函数( SLS ,第 8.5 节)的快捷方式定义,即 one of the function kinds :
val isOdd: PartialFunction[Int, String] = {
case x if x % 2 == 1 => x+" is odd"
}

val upcastedIsOdd: Function[Int, String] = {
case x if x % 2 == 1 => x+" is odd"
}

您不能省略大括号(因此您将失去部分功能和模式匹配的 nicity),但您可以跳过普通大括号(并仍然保留部分功能),就像在下面的代码段中一样:
scala> List(1,2,3).take(1)
//res0: List[Int] = List(1)
scala> List(1,2,3) take 1
//res1: List[Int] = List(1)

关于scala - 在 Scala 中使用 case 语句破坏元组的规则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13131568/

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