我正在尝试以编程方式构建数据日志查询,但一直遇到我将用示例函数说明的问题:
(defn test-expr [attribute]
`[?entity ~attribute ?value]])
当我运行 (test-expr 3) 时,我希望输出:
[?entity 3 ?value]
但相反,我得到
[mynamespace/?entity 3 mynamespace/?value]
这显然不是我想要的。有没有办法告诉clojure“请引用列表并扩展我告诉你的变量?”
最佳答案
就在这里。
(defn test-expr [attribute]
`[~'?entity ~attribute ~'?value])
在这里,您首先取消引用语法引用,然后立即再次引用符号(
~'
构造)。结果是无命名空间的符号。它等效于以下内容,其中解释了它的工作原理:
(defn test-expr [attribute]
`[~(quote ?entity) ~attribute ~(quote ?value)])
关于macros - 为什么 clojure 向反引号内的名称添加 namespace 限定符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13758555/