32
我在浏览Clojure的来源,我的方式感到惊讶时,宏定义:的Clojure当宏观
user=> (source when)
(defmacro when
"Evaluates test. If logical true, evaluates body in an implicit do."
{:added "1.0"}
[test & body]
(list 'if test (cons 'do body)))
nil
user=>
我期待它写成这样的事情,而不是:
(defmacro when [test & body] `(if ~test (do [email protected])))
为什么用这种不太常见的方式编写实际的宏?
我希望我有更多向上票给这个。 – 2012-08-04 00:20:06
680行似乎是defmulti宏。和语法引号(我假设)是一个读者宏。你能详细说明语法引用需要什么函数/宏吗? – Kevin 2012-08-04 18:15:11
凯文,你为什么不跟着这些行号后面的链接。在682行或附近没有'defmulti',所以你可能正在看这个文件的其他版本。至于语法引用需要什么,它很简单:**在此特定版本的文件中定义在行682 **之上的所有内容。 – 2012-08-09 19:22:29