这是关于多分派的系列文章的第 3 部分。
- 系列文章背景:第 1 部分介绍问题及相关问题和 C++中的一些可能解决方案;第 2 部分回顾 Python 中的多分派。本部分回到多分派的根源——Common Lisp,它是最早引入多方法和基于多分派的 OOP 系统的主流编程语言之一。
- 历史背景:OOP 最早出现在 20 世纪 60 年代,Common Lisp 是 20 世纪 80 年代多种 Lisp 实现的整合,CLOS 是其对象系统,从 20 世纪 70 年代中期就开始出现 OOP 库的雏形,其多方法等概念对现代语言设计有影响。
- Common Lisp 与 CLOS:Common Lisp 是多种 Lisp 实现的标准,CLOS 是其对象系统,具有强大的 OOP 功能和许多高级特性。
- CLOS 中的多态分派:CLOS 的运行时多态基于多分派而非单分派,保留了统一的语法形式,通过特殊参数形式来确定方法调用的条件,从单分派到多方法是自然的延伸。
- CLOS 与多方法:给出了形状交集问题的 Common Lisp 实现,展示了 CLOS 原生支持多分派,方法只是函数,可以像使用其他函数一样使用它们,还介绍了值-based 分派、方法组合等特性,如 :before、:after、:around 标记等,以及如何控制方法调用的顺序,但这些高级特性在 99%的情况下可能不太有用。
- CLOS:赞成还是反对:在探索多分派方面,Common Lisp 和 CLOS 表现出色,但其高级特性使用需谨慎,接下来的第 4 部分将聚焦于 Clojure。
- 相关链接:推荐了一些学习 CLOS 的资源,如 Richard Gabriel 的概述、《Practical Common Lisp》、Paul Graham 的《On Lisp》、Norvig 的 PAIP 等。同时提到 Julia 和 Perl 6 等现代语言也支持原生多分派,以及 Lisp 家族的一些情况和元对象协议等。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。