2014-01-07 2 views
0

상단에 모두 표시하지 않고 도우미 기능을 파일 맨 아래에 유지하는 방법을 찾고 있습니다.클로저로 도우미 기능을 자동으로 선언합니다.

하나의 해결책은 현재 파일에서 defn- 매크로를 통해 생성 된 모든 함수의 이름을 가져 와서 선언 호출에서 감싸는 "declare-helpers"함수를 작성하는 것입니다.

나는 그 이름을 붙잡는 더 나은 방법에 대해 묻고 있습니다.

* 편집 *

나는이 있지만, 다음 코드는 내가 단지 도우미에 적용하는 것이

참고 원하는 "dehfn"매크로

으로 정의 기능을 무엇을 할 것으로 보인다 나쁜 관행을 알고
;define helper function 
(defmacro dehfn [name & body] 
    `(defn- ~name [email protected])) 

(defmacro declare-helpers [] 
    `(declare [email protected](map symbol 
        (re-seq #"(?<=dehfn\s)[a-zA-Z+!\-_?0-9*~#@''`/.$=]*(?=\s)" 
          (slurp (str "src/" *file*)))))) 

지금 당신은이 작업을 수행 할 수 있습니다

(declare-helpers) 

(defn hello-user [name] (greet name)) 

(dehfn greet [name] (str "Hello my dear " name)) 
+1

왜 그렇게하고 싶습니까? 맨 아래에 사용되는 맨 위에있는 함수를 작성하는 것은 가독성을 높이는 간단한 방법입니다. 결국, 사람들은 여전히 ​​위에서 아래로 코드를 읽습니다. 함수가 API에 노출되어 있지 않거나 ns의 퍼블릭이 아니기 때문에, 소스 파일을 열 때 독자가 관심을 가지는 내용의 중요한 부분이기 때문에 중요성이 덜 중요합니다. –

답변

6

이것은 불가능합니다. 어떤 매크로도 매크로 호출보다 나중에 파일에 기록 된 코드에 대해 알 수 없습니다. 아직 검사 할 변수가 없기 때문입니다. "거꾸로"파일을 읽는 연습을하십시오 : Clojure는 대중 및/또는 중요한 내용이 종종 바닥에있는 유일한 언어는 아닙니다.

+0

대부분의 해석 언어가 비슷한 구조를 가졌다 고 가정하는 것이 안전합니까 (바닥에 중요한 물건)? – Chiron

+0

이것은 또한 수학적 설명과 같은 순서입니다 - 교정은 교정 전에옵니다. –

+0

그냥 "현재 헬퍼 선언 매크로 또는 함수를 문자열 형식으로 현재 파일을 가져 와서 정규 표현식으로 이름을 붙일 수는 없습니까? – szymanowski

관련 문제