我正在浏览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=>
Run Code Online (Sandbox Code Playgroud)
我期待它写成这样的东西:
(defmacro when [test & body] `(if ~test (do ~@body)))
Run Code Online (Sandbox Code Playgroud)
为什么用这种不太常见的方式写出实际的宏?
| 归档时间: |
|
| 查看次数: |
1626 次 |
| 最近记录: |