如果我添加一个新的案例类,这是否意味着我需要搜索所有模式匹配代码并找出需要在哪里处理新类?我最近一直在学习这门语言,当我读到一些支持和反对模式匹配的论点时,我对应该在哪里使用它感到困惑。请参阅以下内容:
Pro:
Odersky1 and
Odersky2
Con:
Beust
每种情况下的评论也都非常好。那么模式匹配是值得兴奋的事情还是我应该避免使用的事情呢?实际上,我想答案是“这取决于你何时使用它”,但是它有哪些积极的用例,有哪些消极的用例?
杰夫,我认为你有正确的直觉:这要看情况。
当您有一组需要实现的相对固定的方法,但许多潜在的子类可能从层次结构的根继承并实现这些方法时,具有虚拟方法分派的面向对象的类层次结构非常有用。在这样的设置中,添加新的子类相对容易(只需实现所有方法),但添加新方法相对困难(您必须修改所有子类以确保它们正确实现新方法)。
当您有属于某种数据类型的一组相对固定的类,但有许多对该数据类型进行操作的潜在函数时,具有基于模式匹配功能的数据类型就很好。在这样的设置中,为数据类型添加新功能相对容易(只需对其所有类进行模式匹配),但添加作为数据类型一部分的新类相对困难(您必须修改所有匹配的函数)数据类型以确保它们正确支持新类)。
OO 方法的典型示例是 GUI 编程。 GUI 元素需要支持很少的功能(在屏幕上绘制自身是最低限度的),但新的 GUI 元素一直在添加(按钮、表格、图表、滑块等)。模式匹配方法的典型示例是编译器。编程语言通常具有相对固定的语法,因此语法树的元素很少改变(如果有的话),但语法树上的新操作不断被添加(更快的优化、更彻底的类型分析等)。
幸运的是,Scala 允许您结合这两种方法。案例类既可以进行模式匹配,也可以支持虚方法分派。常规类支持虚方法分派,并且可以通过在相应的伴随对象中定义提取器来进行模式匹配。由程序员决定每种方法何时合适,但我认为两者都很有用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)