clojure.core unquote和unquote-splicing

时间:2011-07-11 14:30:12

标签: clojure

在clojure.core文件的顶部(在注释和名称空间声明下面),有两个定义,没有额外的代码或信息:

(def unquote)
(def unquote-splicing)

他们做了什么/他们为什么在那里?

1 个答案:

答案 0 :(得分:6)

它们是虚拟的价值观。读者将~x扩展为(unquote x),将~@x扩展为(unquote-splice x)。然后在syntax-quote中专门处理这些类型的列表。

他们的声明也允许在syntax-quote之外使用它们,例如:在你自己的宏中。

由于它们没有绑定任何东西,它们在syntax-quote之外的使用或处理它们的宏会引发异常。