gpt4 book ai didi

scala - "case"在 Scala 的部分函数中究竟是如何工作的?

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

我刚刚开始使用 Scala 进行看似陡峭的学习曲线,并且不能完全掌握“案例”在部分函数中的工作原理。

我查看了 PartialFunction 本身的定义,我看到了如下示例:

val isEven: PartialFunction[Int, String] = { 
case x if x % 2 == 0 => x+" is even"
}

我卡住的部分是 情况 x 如果 x%2 -- Scala 怎么知道这里有什么?这个“案例”陈述/关键字的正式定义是什么?

我认为我感到困惑的一个原因是因为在 Lift 中我看到了以下内容(在 Actor 类中):
override def messageHandler = {
case SomeKindOfUserMessageClass(id1, param1) => ....
case AnotherKindOfUserMessageClass(id2) => ....
}

我有点直观地理解这里发生了什么,但我无法对应该如何使用“案例”进行某种统一的定义。更让我困惑的是 Scala 编译器是如何解开这一切的。

最佳答案

你要问的东西叫做 pattern matching .模式匹配 block 可以与 match 一起使用关键字,或者它可以用于定义函数或部分函数,​​具体取决于上下文。

您的第二个示例使用 extractors . Scala 对 m match { case A(x) => } 的评价涉及调用A.unapply(m) . case class 的伴随对象是一个提取器(使用案例类比实际编写 unapply 方法更常见)。

Scala Language Specification读起来很难,但有时值得一试,特别是如果您正在寻找形式主义。第 8 章是关于模式匹配的。 8.4 节介绍了使用if 的想法。在第一个示例中的 case 子句中。

关于scala - "case"在 Scala 的部分函数中究竟是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20171688/

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