相关疑难解决方法(0)

clojure的语法引用如何工作?

clojure中的各种特殊字符是事物的缩写

(quote (a b)) 是相同的 '(a b)

正如你可以通过评估看到:

user> ''(a b)
(quote (a b))
Run Code Online (Sandbox Code Playgroud)

这似乎是语法缩写,这让我觉得很好.

但语法引用`似乎很特别.我想不出什么相当于

`(a b)
Run Code Online (Sandbox Code Playgroud)

我会猜到类似的东西(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))))
Run Code Online (Sandbox Code Playgroud)

有点神秘.

大概读者正在做一些特别的事情,也许是因为它需要知道命名空间?

有趣的是,syntax-quote中使用的特殊语法确实可以正常工作:

user> '~a
(clojure.core/unquote a)
user> '~@a
(clojure.core/unquote-splicing a)
user> '~'a
(clojure.core/unquote (quote a))
Run Code Online (Sandbox Code Playgroud)

除了这一个:

user> 'a#
a#
Run Code Online (Sandbox Code Playgroud)

我本以为会产生类似的东西 (unquote (gensym "a"))

我确实意识到我在这里有点虚弱,应该去阅读代码.如果没有人想解释正在发生的事情或提供参考,那么任何人都可以给我一个关于如何找到相关代码以及寻找什么的提示吗?

clojure

30
推荐指数
1
解决办法
5630
查看次数

标签 统计

clojure ×1