我意识到 Macro Club 的第一条规则是不要使用宏,所以下面的问题更多地是作为学习 Clojure 的练习而不是其他任何东西(我意识到这不一定是宏的最佳使用)。
我想编写一个简单的宏,它充当常规(defn)
宏的包装器,并最终将一些元数据添加到定义的函数中。所以我想要这样的东西:
(defn-plus f [x] (inc x))
...扩展成这样的东西:
(defn #^{:special-metadata :fixed-value} f [x] (inc x))
原则上这对我来说似乎并不难,但我无法[args]
确定正确解析定义函数中的和其他形式的细节。
作为奖励,如果可能的话,我希望宏能够处理所有不同形式的 defn(即,有或没有文档字符串、多个 arity 定义等)。我在clojure-contrib/def
包中看到了一些看起来可能有用的东西,但是很难找到使用它们的示例代码。