gpt4 book ai didi

scala - Scala 模式匹配对面向对象有害吗?

转载 作者:行者123 更新时间:2023-12-01 09:09:26 26 4
gpt4 key购买 nike

免责声明:我在 Java 方面比在 Scala(我正在学习)方面更有经验。

在 Java 中,我多次读到 switch 可能对面向对象有害,尤其是在针对类型使用时(这种问题也导致了这个:http://www.antiifcampaign.com/)。

在 Scala 中,Martin Odersky 的介绍视频类(class)之一展示了模式匹配如何更好地替代多个“低级”isInstanceOf 检查。

尽管模式匹配比简单的 Java 开关捕获更灵活的模式,但我仍然将前者视为后者的概括。

难道模式匹配和“打开类型”大致共享相同的基本方法吗?模式匹配不只是一些隐藏大量 isInstanceOf/asInstanceOf 的语法糖吗?

如果不是,模式匹配如何比​​我们自己编写那些低级检查更灵活(例如:适应变化)(除了这项繁琐任务容易出错的性质)?

最佳答案

从某种意义上说,模式匹配很可能是“语法糖”,但它不仅仅是代码替换。

a) match 构造将通过确保没有未发现的情况来强制域的完整性,除非您明确指出它只是一个部分函数。

b) 匹配语法更简洁。

c) 匹配结构包括守卫,限定匹配的谓词。

def mergeSort(a: List[Int], b: List[Int]): List[Int] = (a, b) match {
case (ah :: at, bh :: bt) if ah < bh =>
ah :: mergeSort(at, b)
case (ah :: at, bh :: bt) if ah >= bh =>
bh :: mergeSort(a, bt)
case (Nil, b) =>
b
case (a, Nil) =>
a
}

d)解构

...
case Node(x, Empty, Empty) =>
x - 52
...

声明式的形式更容易阅读(需要一些经验)。

编辑:关于 Scala 经常使用术语“语法糖”。但是,类型推断和“积极的”类型解析(例如模式匹配中使用的)可以构建强大的语言结构。至于最初的问题,模式匹配独立于面向对象,并提供了强大的、类型安全的方法来访问数据,这可能会减少对类的使用。

关于scala - Scala 模式匹配对面向对象有害吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23850703/

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