Clojure中的一些特殊字符是缩写
(quote (a b))
与'(a b)
是相同的
可以通过评估来看到:
user> ''(a b)
(quote (a b))
这似乎是一种以语法为缩写的方法,我觉得这是个好主意。但是语法引用符 ` 似乎很特殊。我想不出什么东西可以等效于它。
`(a b)
我本以为应该用类似于(syntax-quote (a b))
的语法,但是它不起作用,如果我的猜想是错的,我也找不到它真正被称作什么。
我会猜测类似于(syntax-quote (a b))
这样的语法,但它并不起作用。如果我猜错了,我也不知道它真正的命名。
user> '`(a b)
(clojure.core/seq (clojure.core/concat (clojure.core/list (quote user/a)) (clojure.core/list (quote user/b))))
有点神秘。
可能读者正在做一些特殊的事情,也许是因为它需要知道命名空间?
有趣的是,在语法引用中使用的特殊语法确实按照我的预期工作:
user> '~a
(clojure.core/unquote a)
user> '~@a
(clojure.core/unquote-splicing a)
user> '~'a
(clojure.core/unquote (quote a))
除了这一个之外:
user> 'a#
a#
我本来以为会产生类似于(unquote (gensym "a"))
的东西。我意识到我有点脆弱,应该去看代码。如果没有人愿意解释发生了什么或提供参考资料,那有人可以给我一个提示如何找到相关的代码以及要查找什么吗?