在clojure.core文件的顶部(在注释和名称空间声明下面),有两个定义,没有额外的代码或信息:
(def unquote)
(def unquote-splicing)
他们做了什么/他们为什么在那里?
答案 0 :(得分:6)
它们是虚拟的价值观。读者将~x
扩展为(unquote x)
,将~@x
扩展为(unquote-splice x)
。然后在syntax-quote中专门处理这些类型的列表。
他们的声明也允许在syntax-quote之外使用它们,例如:在你自己的宏中。
由于它们没有绑定任何东西,它们在syntax-quote之外的使用或处理它们的宏会引发异常。