clojure - 为什么 `(def ^ :private name 1 ) eval to (def namespace/name 1)?

标签 clojure

为什么会这样:

`(def ^:private name 1 )

评估为:

(def namespace/name 1) 

而不是这个:

(def ^:private namespace/name 1) 

我只是想写一个小宏:

(defmacro def- [name val] `(def ^:private ~name ~val))

但它扩展为:

(macroexpand-1 `(def- foo 12))
=> (def namespace/foo 12)

最佳答案

因为clojure defmacro loses metadata ,因为 ^ 是一个读取器宏。

并且 :privatesymbol metadata ,所以它丢失了。

查看第一个链接上问题的答案以获取解决方案。

关于clojure - 为什么 `(def ^ :private name 1 ) eval to (def namespace/name 1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904915/

相关文章:

clojure - 如何键入提示数组?

clojure - lein测试时出现无效的防伪错误

clojure - 如何在 clojure 中实现带有嵌套返回的循环?

Clojure:使用多个参数的函数进行过滤

logging - 如何使用 core.async 在 Clojure 中写入日志文件?

clojure - 从 jar 导入 clojure 函数

Clojure.logic 与 The Reasoned Schemer 的区别

java - 如何通过 Clojure 互操作访问静态内部 Java 类?

java - 尝试使用 Monger 连接到 mongo 时出现 CompilerException java.lang.ClassNotFoundException : org. bson.types

Clojure、Java Interop 和代理方法