- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
免责声明:我在 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/
就目前而言,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引起辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visit the he
我在摆弄 LinqToSQL 和 LINQPad,我注意到 SingleOrDefault() 没有对生成的 SQL 进行任何过滤或限制(我几乎期望与 Take(1) 等效)。 因此,假设您想保护自己
我是一名优秀的程序员,十分优秀!