表达式问题的优雅解决:多重派发与开放方法

2025-09-07

本文探讨了困扰面向对象和函数式编程的“表达式问题”:如何在不修改现有代码的情况下,添加新的数据类型和操作。作者通过C++和Haskell的例子,展示了这个问题的本质。传统的OOP方法难以同时扩展类型和操作,而函数式编程也存在类似的局限性。文章深入分析了访问者模式及其扩展,并最终以Clojure的多方法和协议为例,展示了如何通过多重派发和开放方法优雅地解决表达式问题,实现代码的灵活性和可扩展性。