clojure when宏

clojure when宏,clojure,Clojure,我正在浏览clojure源代码,我对when宏的定义方式感到惊讶: 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=> 我希望它写得像这样: (defmacr

我正在浏览clojure源代码,我对when宏的定义方式感到惊讶:

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 ~@body)))

为什么实际的宏是以这种不太常见的方式编写的?

core.clj是自上而下构建的,从Java提供的内容开始,并逐步构建Clojure的所有需求。当定义了
时,语法引号不存在。

在core.clj的上定义了
when
宏和语法引号的要求,直到使用when宏定义语法引号

行680显示为defmulti宏时,才可用。语法引号(我假设)是一个reader宏。你能详细说明语法引号需要什么函数/宏吗?凯文,你为什么不按照那些行号后面的链接来做呢。第682行或附近没有
defmulti
,因此您可能正在查看此文件的其他版本。至于syntax quote需要什么,很简单:在这个特定版本的文件中,第682行上面定义的所有内容。@marco topolnok:我确实关注了你的链接。刚刚意识到iPhone上的行号被搞乱了。谢谢