program tip

clojure / clojurescript의 개인 정의

radiobox 2020. 12. 15. 18:54
반응형

clojure / clojurescript의 개인 정의


Clojure와 clojurescript에서 defn-라는 defn의 비공개 버전을 가질 수 있지만 def-가 포함되지 않은 것처럼 보이기 때문에 def에 대해 동일한 작업을 어떻게 수행합니까?


:private true메타 데이터 키 값 쌍 을 추가해야합니다 .

(def ^{:private true} some-var :value)
;; or
(def ^:private some-var :value)

두 번째 형식은 첫 번째 형식의 축약 형입니다.


언급 할 가치가 있습니다. 현재 ClojureScript에서 비공개 def(및 defn) 를 가질 수 없습니다 . https://clojurescript.org/about/differences ( "특수 양식"아래)

컴파일은 실패하지 않고 def계속 액세스 할 수 있습니다.


정의가 필요한 경우 구현 방법은 다음과 같습니다.

(defmacro def- [item value]
  `(def ^{:private true} ~item ~value)
)

이 Google 그룹 게시물 에는이 주제에 대한 토론이 있습니다. 요청이 고려 된 것 같습니다. 응답 중 하나에 따르면, defn-은 좋은 생각이 아닌 것으로 간주되어 def다른 사람들 과 함께 유지하지 않기로 결정 했습니다.


구현 방법은 다음과 같습니다 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))

참조 URL : https://stackoverflow.com/questions/20443545/private-def-in-clojure-clojurescript

반응형