macros - 为什么 clojure 向反引号内的名称添加 namespace 限定符?

标签 macros clojure datomic

我正在尝试以编程方式构建数据日志查询,但一直遇到我将用示例函数说明的问题:

(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/

相关文章:

clojure - 有没有像 Heroku 这样的东西可以部署 Clojure 风格的 Web 应用程序?

map - 在一个值上减少一组函数?

regex - 数据原子查询 - 过滤和绑定(bind)的函数

clojure - Datomic 中多个属性的全文搜索

clojure - lein REPL服务器启动超时

根据 C 中的宏参数调用特定函数

c++ - 是否可以创建一个宏来在 C/C++ 中创建一致的函数声明?

c - C 标准是否有任何限制允许将函数实现为宏?

javascript - Sweet.js - 如何将变量放入标识符名称和字符串变量中?

clojure - 如何使用原子来更新 map 的状态?