Scala中的模式匹配如何克服切换案例导致的重复?

Amo*_*kar 24 oop design-patterns scala

注意:我问这个问题是出于好奇而不是质疑语言特征的重要性.

看起来是一个伟大的功能介绍给命令式编程世界的人.我是Scala的新手,并且仍然试图找出所有内容,它的大量构造适合并且可以被利用.

模式匹配绝对可以比开关情况好100倍.但是,它仍然是一个案例结构,从OOP出来的时候起我们就更喜欢使用多态性.

所以简而言之,我发现难以理解的是,如果switch case鼓励重复,我们最好将与案例相关的代码编写到各自的类中,那么Scala的模式匹配如何克服这个问题呢?

我们仍然可以为各种情况提供类或泛型类,并再次利用多态来满足我们的需求.

agi*_*eel 16

这是对象和数据结构之间差异的问题.

如果您正在处理对象,请使用子类型多态 - 添加新类型不需要重新编译,重新测试或重新部署现有类型,而添加新算法(接口上的方法,位于层次结构的顶部) .

如果您正在处理数据结构使用模式匹配 - 添加新算法不需要重新编译,重新测试或重新部署现有算法,而添加新类型则需要.

在这里阅读更多相关信息.

  • 请参阅文章"表达式问题的独立可扩展解决方案"(http://zenger.org/papers/fool05.pdf),以便对面向对象和众所周知问题的函数分解进行非常有见地的比较.作者还确定了可扩展性的两个维度,即添加行为和添加子类型,并且它们说明了经典的OO(行为)和经典的FP(子类型)方法在其中一个维度上运行良好,但对另一个维度不太好.他们得出结论,Scala允许您将两种范例结合起来,从而克服这个问题. (3认同)