gpt4 book ai didi

clojure - 为什么 Clojure 的多方法比 'if' 或 'case' 语句更好

转载 作者:行者123 更新时间:2023-12-03 01:32:13 25 4
gpt4 key购买 nike

我花了一些时间试图理解 Clojure 多方法。据我了解,主要的“专业”多方法论点是它们的灵 active ,但是,我对为什么多方法比简单的 if 或 case 语句更好的争论感到困惑。有人可以解释一下,多态性和过度美化的 case 语句之间的界限在哪里吗?

编辑:我应该在这个问题上更清楚,我对与“if”语句进行比较更感兴趣。非常感谢您的解答!

最佳答案

假设我们有类型 A、B、C、D 和 E,并且方法 m1、m2、m3 采用先前类型的单个参数。您可以将它们放在这样的表格中:

   | A | B | C | D | E |
m1 | | | | | |
m2 | | | | | |
m3 | | | | | |

“switch”语句策略一次执行该表的一行。假设您添加一个新类型 F。您必须修改所有实现才能支持它。

基于类的多态性(C++、Java 等)允许您实现整个列。因此添加新类型很容易,因为您不必更改已经定义的类。但是添加新方法很困难,因为您必须将其添加到所有其他类型。

多种方法允许您独立地实现表格的单个单元格。

如果您必须分派(dispatch)多个参数,这种灵 active 会更大。每个新参数都会为此表添加另一个维度,并且基于 swich 和基于类的调度很快就会变得非常复杂(参见访问者模式)。

请注意,多方法实际上比描述的更通用,因为您可以分派(dispatch)几乎任何内容,而不仅仅是参数的类型。

关于clojure - 为什么 Clojure 的多方法比 'if' 或 'case' 语句更好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9657707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com