私人def in clojure / clojurescript

时间:2013-12-07 16:16:16

标签: clojure clojurescript

在Clojure和clojurescript中你可以拥有一个私有版本的defn,名为defn-,但是你如何对def做同样的事情,因为def-似乎没有被包括在内?

5 个答案:

答案 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))