2012-04-10 3 views
1

일부 데이터베이스 작업을 수행하기 위해 작은 네임 스페이스를 작성했으며 다른 네임 스페이스 내에서 사용하고 싶습니다. 일반적으로 같은 디렉토리에있는 파일을 가지고 다음을 수행하면여러 개의 네임 스페이스가있는 Clojure CLR

(ns program (:require [other-ns :as other]) (:gen-class)) 

모두가 필요합니다. 그러나 Clojure CLR에서는 작동하지 않지만 컴파일러는 other-ns에 대해 알지 못한다고 불평합니다. 이렇게하는 적절한 방법은 무엇입니까? 모든 네임 스페이스에 대해 별도의 어셈블리가 필요합니까?

[편집] 또 다른 예를

another.clj

(ns another) 

    (defn hello [name] (str "Hello " name)) 

나는 REPL에서 program.clj을로드하고이 메시지를받을

(ns program 
    (:require [another :as a]) 
    (:gen-class)) 

program.clj :

FileNotFoundException로드 경로에서 another.clj.dll 또는 another.clj를 찾을 수 없습니다. clojure.lang.RT.load (d : \ work \ clojure-clr \ Clojure \ Clojure \ Lib \ RT.cs : 3068)

+0

http://clojure.org/libs를보고 예상 장소에 모든 네임 스페이스/파일이 있는지 확인하십시오. 무엇이 잘못되었는지 알아낼 수 없다면, (ns ..) 형식, 파일 시스템의 위치 및보고있는 오류를 보여주십시오. –

+0

먼저 프로젝트를 컴파일 할 때 오류가 발생합니까? 그것을 빌드 한 다음 REPL에 program.clj를로드 해보십시오. 내가 물어볼 수있는 유일한 다른 점은 새로운 vsClojure를 사용하고 있다는 것입니다. – Rob

답변

0

같은 디렉토리 filea.clj와 fileb.clj에 두 개의 파일을 만들었습니다. 여기 filea.clj입니다 : 여기

(ns filea) 

(defn hi [] 
    (println "hi from filea")) 

는 것 fileb.clj :

(ns fileb 
    (require [filea :as a]) 
    (:gen-class)) 

(defn -main [] 
    (println "hi from fileb") 
    (a/hi)) 

내가 다음이 파일이 살고있는 디렉토리로 변경하고 실행 :

C : \ \ 임시 멀티 NS> clojure.compile fileb fileb를 컴파일 중입니다. - 59 밀리 초. 내가 그것을 실행했을 때

와 나는 보았다

C : fileb 에서 \ 도구 \ Clojure의-CLR-1.3.0-디버그-4.0 \ fileb.exe 안녕하세요 :> C 멀티 NS \ \ 온도 안녕하세요 from filea

vsClojure를 사용하고 있습니까? 아니면 VS 외부에서 코드를 작성하고 있습니까?

+0

아마도 VsClojure를 사용하고 있었을 것입니다. – Matthew

+0

그냥 vsClojure를 설치하고 program.clj 파일을 보관하고 위의 예에서 fileb.clj 대신 사용했던 것을 제외하고는 위와 동일한 유형의 작업을 수행했습니다. 나는 문제가 없었다. 코드 나 프로젝트 디렉토리와 네임 스페이스의 레이아웃을 게시 할 수 있습니까? – Rob

+0

고마워요. @Rob, 예를 업데이트했습니다. – Matthew

관련 문제