그래서 현재이 코드가 있습니다Clojure의 기호 평가 오류
(ns contact-form.core
(:gen-class))
(def foo "Hello World!")
(defn some-func [a-symbol]
(println (str a-symbol "'s value is: " (eval a-symbol))))
(defn -main [& args]
(some-func 'foo))
을 내가 이맥스에 C-c C-k
을 한 후, 나는 다음과 같은 출력을 얻을 :
contact-form.core> (-main)
foo's value is: Hello World!
nil
을하지만 lein uberjar
을하고 실행할 때 결과 jar 파일에 오류가 발생했습니다.
Exception in thread "main" java.lang.RuntimeException: Unable to resolve symbol: foo in this context, compiling:(NO_SOURCE_PATH:0)
at clojure.lang.Compiler.analyze(Compiler.java:6235)
at clojure.lang.Compiler.analyze(Compiler.java:6177)
at clojure.lang.Compiler.eval(Compiler.java:6469)
at clojure.lang.Compiler.eval(Compiler.java:6431)
at clojure.core$eval.invoke(core.clj:2795)
at contact_form.core$some_func.invoke(core.clj:7)
at contact_form.core$_main.doInvoke(core.clj:10)
at clojure.lang.RestFn.invoke(RestFn.java:397)
at clojure.lang.AFn.applyToHelper(AFn.java:159)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at contact_form.core.main(Unknown Source)
Caused by: java.lang.RuntimeException: Unable to resolve symbol: foo in this context
at clojure.lang.Util.runtimeException(Util.java:156)
at clojure.lang.Compiler.resolveIn(Compiler.java:6720)
at clojure.lang.Compiler.resolve(Compiler.java:6664)
at clojure.lang.Compiler.analyzeSymbol(Compiler.java:6625)
at clojure.lang.Compiler.analyze(Compiler.java:6198)
... 10 more
그래서 두 가지 질문이 있습니다 :
- 왜 uberjar가 REPL과 정확히 동일하게 작동하지 않습니까?
- 이 문제를 해결하려면 어떻게해야합니까?
'use' 그냥 네임 스페이스를 전환보다 훨씬 더 많은 작업을 수행합니다. 나는''(binding [* ns * (the-ns 'contact-form.core)] (some-func'foo))'' – Chouser
@chouser를 추천한다. 나는 교화 된 것으로 생각합니다! :-) – Scott