oop – Scala的模式匹配是否违反开放/封闭原则?
如果我添加一个新的案例类,这是否意味着我需要搜索所有的模式匹配代码,并找出需要处理新类的位置?我最近一直在学习这个语言,当我阅读了关于模式匹配的一些论据,我一直困惑于应该使用哪种语言.请参阅以下内容:
优点: 缺点: 在每种情况下,评论也是非常好的.那么模式匹配的东西要兴奋还是应该避免使用的东西?其实我想像的答案是“这取决于你使用什么时候”,但是对于它有什么积极的用途呢,有什么是负面的呢? 解决方法
杰夫,我觉得你有正确的直觉:这取决于.
具有虚拟方法调度的面向对象的类层次结构,当您有一组相对固定的方法需要实现时,很多潜在的子类可以从层次结构的根部继承并实现这些方法.在这样的设置中,添加新的子类(只是实现所有方法)相对容易,但是添加新方法相对较困难(您必须修改所有子类,以确保它们正确实现新方法). 具有基于模式匹配的功能的数据类型在您具有属于数据类型的相对固定的类集合时很好,但是对该数据类型操作的许多潜在函数.在这样的设置中,为数据类型添加新功能(只是所有类的模式匹配)相对容易,但相对难于添加属于数据类型的新类(您必须修改所有匹配的所有函数在数据类型上,以确保它们正确支持新类). OO方法的典型例子是GUI编程. GUI元素需要支持很少的功能(在屏幕上绘制自己的最低限度),但是始终添加新的GUI元素(按钮,表格,图表,滑块等).模式匹配方法的规范示例是编译器.编程语言通常具有相对固定的语法,因此语法树的元素很少变化(如果有的话),但是不断添加语法树的新操作(更快的优化,更彻底的类型分析等). 幸运的是,Scala让您结合两种方法.案例类可以是模式匹配,并支持虚拟方法调度.常规类支持虚拟方法调度,并可以通过在对应的伴随对象中定义提取器来进行模式匹配.程序员应该决定每种方法是否合适,但我认为两者都是有用的. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |