2011-03-18 6 views
2

내 클로져 코드에는 커스텀 매크로를 호출하여 생성되는 몇 가지 함수가있다. 일반적으로 매크로는 일종의 데이터 구조를 취하여이 매크로에서 메서드를 만듭니다. view-data라는 새로운 기능을 만들 것새 슬라임 세션에서 매크로 작성 기능이 표시되지 않는 이유는 무엇입니까? (clojure)

(create-function {:name "view-data" ...}) 

:

이것은 인위적인 예입니다. (내 데이터베이스 쿼리는 데이터 기반이므로 특정 쿼리를 호출하는 표시 이름을 가진 함수를 만들 수 있습니다.)

mvn clojure:swank 대상을 실행하고 이맥스에서 슬라임 세션에 연결할 때 이러한 함수가 작동하지 않습니다. 보이지 않습니다. 필자는 파일을 방문하여 컴파일 할 함수를 C-c C-k으로 컴파일해야합니다.

출력 결과는 파일 자체가 제대로 컴파일되지만 슬라이스 세션은 기능을 알 수 없음을 나타냅니다.

왜 이런 일이 일어날 수 있으리라 생각하십니까?

답변

1

내 프로젝트에있는 파일 require은 repl에서 사용 가능한 모든 곳의 모든 기능을 만드는 모든 네임 스페이스입니다. 아마도 더 슬슬하고 우아한 방법이 있지만,이 해킹은 나를 위해 매우 안정적입니다.

1

clojure에서 컴파일 및로드는 별도의 단계임을 유의하십시오. 원하는 모든 클래스 파일을 생성 할 수 있지만로드되지 않은 경우 실행중인 프로세스에는 영향을 미치지 않습니다.

나는 clojure에 대해 충분히 모른다 : swipe for maven,하지만 저에게 들리니, leiningen처럼, swank 타겟은 프로젝트의 클래스 패스를 설정하고 스왑 코드를로드하지만 코드는로드하지 않는다는 것을 알게됩니다. 프로젝트에서 따라서로드 된 후에는 (예를 들어, Emacs/SLIME에서 다른 타겟/플러그인을 사용하거나 REPL에서) 코드를로드 할 수 있습니다.