gpt4 book ai didi

scala - Scala 中如何省略匹配词?

转载 作者:行者123 更新时间:2023-12-04 00:03:12 25 4
gpt4 key购买 nike

在 Scala 中,你可以这样做

list.filter { item =>
item match {
case Some(foo) => foo.bar > 0
}
}

但是你也可以通过省略 match 来更快地完成:
list.filter {
case Some(foo) => foo.bar > 0
}

这在 Scala 中是如何支持的?这是 2.9 的新功能吗?我一直在寻找它,我可以弄清楚是什么使这成为可能。它只是 Scala 编译器的一部分吗?

最佳答案

编辑 : 这个答案的一部分是错误的;请引用huynhjl's answer .

如果省略 match ,您向编译器发出信号,表明您正在定义 偏函数 .偏函数是没有为每个输入值定义的函数。例如,您的过滤器函数仅针对 Some[A] 类型的值定义。 (对于您的自定义类型 A )。
PartialFunction s 扔一个 MatchError当您尝试将它们应用于未定义的地方时。因此,当您传递 PartialFunction 时,您应该确保哪里有正规Function已定义,您的部分函数将永远不会用未处理的参数调用。这种机制非常有用,例如用于解包集合中的元组:

val tupleSeq: Seq[(Int, Int)] = // ...
val sums = tupleSeq.map { case (i1, i2) => i1 + i2 }

要求部分功能的 API,如 collect对集合进行类似过滤的操作,通常调用 isDefinedAt在应用偏函数之前。在那里,有一个不为每个输入值定义的偏函数是安全的(并且经常需要)。

所以你看到,虽然语法接近于 match ,这实际上是我们正在处理的完全不同的事情。

关于scala - Scala 中如何省略匹配词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7168026/

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