在Clojure和clojurescript中你可以拥有一个私有版本的defn,名为defn-,但是你如何对def做同样的事情,因为def-似乎没有被包括在内?
答案 0 :(得分:76)
您必须添加:private true
元数据键值对。
(def ^{:private true} some-var :value)
;; or
(def ^:private some-var :value)
第二种形式只是第一种形式的简写。
答案 1 :(得分:16)
值得一提的是,目前在ClojureScript中无法拥有隐私def
(和defn
):https://clojurescript.org/about/differences(&#34) ;特殊形式")
编辑不会失败,但def
仍然可以访问。
答案 2 :(得分:13)
如果你想要一个def-,这里有如何实现它
(defmacro def- [item value]
`(def ^{:private true} ~item ~value)
)
答案 3 :(得分:8)
此Google论坛post讨论了此主题。显然,该请求已被考虑。根据其中一个回复,defn-
被认为不是一个好主意,并决定不与def
和其他人保持一致。
答案 4 :(得分:3)
以下是如何实施def-
:
(defmacro def-
"same as def, yielding non-public def"
[name & decls]
(list* `def (with-meta name (assoc (meta name) :private true)) decls))
此代码与defn-
的代码非常相似,您可以使用(clojure.repl/source defn-)
查找代码:
(defmacro defn-
"same as defn, yielding non-public def"
{:added "1.0"}
[name & decls]
(list* `defn (with-meta name (assoc (meta name) :private true)) decls))