【发布时间】:2012-07-24 10:25:11
【问题描述】:
注意:我问这个问题是出于好奇,而不是质疑语言功能的重要性。
看起来是向命令式编程世界的人们介绍的一项很棒的功能。 我是 Scala 的新手,但仍在尝试找出所有内容的位置,使其大量构造适合并可以利用。
模式匹配绝对可以比开关盒做得好 100 倍。 但是,自从 OOP 出现以来,我们仍然倾向于使用多态性。
简而言之,我觉得难以理解的是,如果 switch case 鼓励重复,我们最好将 case 相关的代码写入相应的类,那么 Scala 的模式匹配如何克服这个问题?
我们仍然可以为各种情况使用类或泛型类,并再次利用多态性来满足我们的需求。
【问题讨论】:
-
简答:algebraic data types。模式匹配是使用 ADT 的一种非常简单和优雅的方式。如果您的代码更面向对象,则多态可能更适合。
-
“它的大量构造集”——不要让 Martin Odersky 读到它。他为 Scala 的结构集比其他语言小得多这一事实感到自豪。他更喜欢一种具有少量强大、可组合、正交结构的语言。通过统一例如将功能和对象整合到一个结构中,或者将模块、组件和对象统一到一个结构中。或者使用继承来实现代数数据类型。
-
@JörgWMittag:他确实做到了简单。但同时也为经验丰富的 Java 开发人员带来了很多新事物。所有这些都是非常强大的功能,但前提是我们要花时间一一理解它们。纯粹的 OOness 融合了丰富的功能特性真的很棒。但与此同时,演员、模式匹配、FP 本身是许多新事物,Java 开发人员很容易感到困惑。我在想是用 Java 的方式做 Scala 还是尽可能地跳到演员和模式匹配中去。
-
我不明白你的问题。你能解释一下你的意思a)“重复”,b)“编写类型相关代码”吗?
-
@0__:我有点困惑,什么时候进行模式匹配,什么时候进行多态,因为我根本不打算用它来代替 switch,因为我根本不使用它。所以我想知道在 Scala 中编写 OO 代码时模式匹配的一般用例是什么,而不是代数数据类型,这也是大多数 scala 书籍中的代数数据类型。敏捷钢的回答为我清除了这一点。
标签: oop scala design-patterns