design-patterns - 在 Clojure 的宏中声明设计模式

标签 design-patterns clojure lisp jvm metaprogramming

Lisp 的优点之一是宏。我读过很多关于在 Java 中你一次又一次地编写设计模式的文章。不在 Lisp/Clojure 中。
在 Lisp/Clojure 中,您可以在宏中声明模式,而您只需编写实际代码。

好吧,不错,花花公子,但眼见为实。

您能否向我提供(或推荐我)一个代码示例 - 最好是 Clojure - 关于如何在宏中声明设计模式?

最佳答案

大多数现有的设计模式都起源于面向对象的世界,并且只在面向对象的世界中才有意义。一旦您进入函数式编程,尤其是 Lisp 方言(例如 Clojure),您对设计模式的需求就会越来越小。有一个关于设计模式和 FP 的有趣讨论 here .

另一方面,宏并不是为了封装设计模式,而是用更方便的结构来扩展语言,以解决手头的问题。乘坐with-open宏:将其称为对资源调用 close 的设计模式似乎完全错误。

模式也存在于 FP 世界中,但由于您不再拥有对象,因此它们的主要重点是算法。 FP 语言“模式”的好例子是 monadszippers .

警告:理解这些概念可能需要时间,但绝对值得理解其中的每一点。

关于design-patterns - 在 Clojure 的宏中声明设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5246677/

相关文章:

design-patterns - 如何定义抽象小部件?

clojure - 为什么 clojure 将名称中的破折号转换为文件系统中的下划线?

testing - 是否有一种(惯用的)方法来测试 Clojure 中 IO 函数的结果?

eclipse - 在逆时针严格paredit模式下删除多余的括号

lisp - 如何忽略 Common Lisp 中的返回值

java - 设计问题 - 带有枚举实现接口(interface)的模板模式

javascript - 将主干 View 功能分离到单独的文件中

design-patterns - 服务类是否应该不仅仅是存储库类的包装器?

lisp - 亲子关系

lisp - "lisp form"的定义?