macros - Clojure 中尚未提供的简单而引人注目的宏示例

标签 macros clojure

我正在尝试编写一个宏教程,现在我需要一些易于理解但又引人入胜的示例。

问题是很多显而易见的事情已经在 clojure 和 contrib 中了。而且我觉得“看,我们可以重新实现所有库函数”可能不是宏为何如此出色的最佳论据。

有没有人有任何他们不介意我使用的可爱的(最好是单行的)例子?

这是本教程的前三部分。目前它有点棘手,因此将不胜感激地收到有关如何使其变得更好的任何评论。

http://learnclojure.blogspot.com/2010/09/clojure-macro-tutorial-part-i-getting.html

http://learnclojure.blogspot.com/2010/09/clojure-macro-tutorial-part-ii-compiler.html

http://learnclojure.blogspot.com/2010/09/clojure-macro-tutorial-part-ii-syntax.html

最佳答案

我会更多地谈论模式:何时以及如何使用宏。例如...

  • 保护资源。示例:binding , with-open , ...
    (let [~x (get-resource)] (try ~@dostuff (finally (release-resource ~x))))
  • 定义事物。示例:defn , defsnippet (活跃), defservice (戒指)
  • 宏/驱动程序拆分。特别是这种技术消除了很多宏观痛苦。
    像多重评估或捕获。示例:with-bindings
  • 美化丑陋的代码。例如。当Taming multi-dim arrays
  • 关于macros - Clojure 中尚未提供的简单而引人注目的宏示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3711138/

    相关文章:

    clojure - 防止 Clojure 简化比率

    macros - 如何使用先前的定义重新定义宏

    PHP 内部 : How does TSRMLS_FETCH Work?

    macros - 如何将空白/空参数传递给 Rust 中的宏?

    clojure - Clojure 中的外部连接

    Clojure 列表操作

    c++ - 仅当编译器开始构建时才为 true 的宏

    c++ - 如何理解充满宏的大型 C/C++ 代码?

    clojure - 使用 test.check 生成排序数据

    clojure - 如何在不强制实现的情况下找到惰性序列的长度?