clojure.core unquote和unquote-splicing

Ali*_*ins 5 clojure

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

(def unquote)
(def unquote-splicing)
Run Code Online (Sandbox Code Playgroud)

这些做什么/他们为什么在那里?

kot*_*rak 6

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

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

由于它们不受任何约束,因此它们在syntax-quote之外的使用或处理它们的宏会引发异常.