逗号不在反引号内
Comma not inside a backquote
我一直在关注 http://www.gigamonkeys.com/book/
。
在 http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html
一章中有一个名为 check
的宏,其定义如下。
(defmacro check (form)
`(report-result ,form ',form))
根据我对宏的理解,我认为上面的代码等同于下面的代码
(defmacro check (form)
`(report-result ,form form))
但它抛出 Comma not inside a backquote.
。
如果您想象 form
被计算为符号 test
,那么这是真的:
`(report-result ,form ',form))
==> (report-result test 'test)
所以 '
留在扩展中,以便在评估中引用替换的形式。但是您的 "equivalent" 这样做:
`(report-result ,form form)
==> (report-result test form)
在这里您看到 form
从未被替换,所以现在您需要有一个名为 form
的变量,否则您会收到错误消息。
我一直在关注 http://www.gigamonkeys.com/book/
。
在 http://www.gigamonkeys.com/book/practical-building-a-unit-test-framework.html
一章中有一个名为 check
的宏,其定义如下。
(defmacro check (form)
`(report-result ,form ',form))
根据我对宏的理解,我认为上面的代码等同于下面的代码
(defmacro check (form)
`(report-result ,form form))
但它抛出 Comma not inside a backquote.
。
如果您想象 form
被计算为符号 test
,那么这是真的:
`(report-result ,form ',form))
==> (report-result test 'test)
所以 '
留在扩展中,以便在评估中引用替换的形式。但是您的 "equivalent" 这样做:
`(report-result ,form form)
==> (report-result test form)
在这里您看到 form
从未被替换,所以现在您需要有一个名为 form
的变量,否则您会收到错误消息。