【发布时间】:2010-09-13 20:58:56
【问题描述】:
clojure 中的各种特殊字符都是事物的缩写
(quote (a b)) 与'(a b) 相同
你可以通过评估看到:
user> ''(a b)
(quote (a b))
这似乎是缩写形式的语法,我觉得这是个好主意。
但是语法引用 ` 似乎很特别。我想不出什么相当于
`(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"))的东西
我确实意识到我在这里有点虚弱,应该去阅读代码。如果没有人愿意解释发生了什么或提供参考,谁能给我一个关于如何找到相关代码和寻找什么的提示?
【问题讨论】:
-
这个blog.8thlight.com/colin-jones/2012/05/22/…有一篇非常好的文章@
标签: clojure