Clojure 네임 스페이스를 여러 파일로 분할
?로 사전 컴파일을 수행 할 때 여러 소스 파일에 걸쳐 Clojure 네임 스페이스를 분할 할 수 :gen-class
있습니까? 어떻게 (:main true)
하고 (defn- ...)
활동하기 시작?
개요
확실히 당신은 할 수 있습니다. 사실 clojure.core
네임 스페이스 자체는 이런 방식으로 분리되어 있으며 다음을 살펴보면서 따라갈 수있는 좋은 모델을 제공합니다 src/clj/clojure
.
core.clj
core_deftype.clj
core_print.clj
core_proxy.clj
..etc..
이러한 모든 파일이 참여하여 단일 clojure.core
네임 스페이스 를 구축합니다 .
기본 파일
이 중 하나는 네임 스페이스 이름과 일치하도록 명명 된 기본 파일로, 누군가가 :use
또는 에서 언급 할 때 찾을 수 있도록합니다 :require
. 이 경우 기본 파일은 clojure/core.clj
이고 ns
양식으로 시작 합니다. 여기에 필요한 다른 파일에 관계없이 모든 네임 스페이스 구성을 넣어야 합니다. 여기에는 일반적으로 다음 :gen-class
과 같은 내용도 포함 됩니다.
(ns my.lib.of.excellence
(:use [clojure.java.io :as io :only [reader]])
(:gen-class :main true))
그런 다음 기본 파일의 적절한 위치 (가장 일반적으로 모두 끝 부분)를 사용 load
하여 도우미 파일을 가져옵니다. 에서 clojure.core
그것은 다음과 같습니다 :
(load "core_proxy")
(load "core_print")
(load "genclass")
(load "core_deftype")
(load "core/protocols")
(load "gvec")
접두사로 현재 디렉터리가 필요하지 않으며 .clj
접미사 가 필요하지 않습니다 .
도우미 파일
각 도우미 파일은 도움이되는 네임 스페이스를 선언하는 것으로 시작해야하지만 in-ns
함수를 사용하여 그렇게해야 합니다. 따라서 위의 예제 네임 스페이스의 경우 도우미 파일은 모두 다음으로 시작됩니다.
(in-ns 'my.lib.of.excellence)
그게 전부입니다.
세대 급
이러한 모든 파일이 단일 네임 스페이스를 빌드하기 때문에 정의하는 각 함수는 기본 또는 도우미 파일에있을 수 있습니다. 이것은 물론 gen-class
원하는 파일에서 함수를 정의 할 수 있음을 의미합니다 .
(defn -main [& args]
...)
Clojure의 일반적인 정의 순서 규칙은 여전히 모든 함수에 적용되므로 해당 함수 를 사용 하기 전에 함수를 정의 하는 파일 이로드 되었는지 확인해야 합니다.
개인 변수
You also asked about the (defn- foo ...)
form which defines a namespace-private function. Functions defined like this as well as other :private
vars are visible from within the namespace where they're defined, so the primary and all helper files will have access to private vars defined in any of the files loaded so far.
참고URL : https://stackoverflow.com/questions/4690758/splitting-a-clojure-namespace-over-multiple-files
'programing tip' 카테고리의 다른 글
어셈블리 바인딩 리디렉션 : 방법 및 이유 (0) | 2020.09.08 |
---|---|
PHP 세션 ID는 얼마나 고유합니까? (0) | 2020.09.08 |
복사 된 웹 텍스트에 추가 정보를 추가하는 방법 (0) | 2020.09.08 |
Python 요청 및 영구 세션 (0) | 2020.09.07 |
Python 추출 패턴 일치 (0) | 2020.09.07 |