Vì vậy, tôi hiện đang có mã này:Clojure lỗi đánh giá biểu tượng
(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))
Sau khi tôi làm C-c C-k
trong Emacs, tôi nhận được kết quả như sau:
contact-form.core> (-main)
foo's value is: Hello World!
nil
Nhưng khi tôi làm lein uberjar
và chạy kết quả tệp jar, tôi gặp lỗi:
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
Vì vậy, tôi có hai câu hỏi:
- Tại sao uberjar không hoạt động chính xác giống như REPL?
- Tôi có thể làm gì để khắc phục sự cố này?
'use' còn có nhiều hơn chỉ cần chuyển đổi không gian tên. Tôi muốn giới thiệu '' (binding [* ns * (liên hệ-ns 'form.core)] (một số-func' foo)) '' – Chouser
@chouser Tuyệt vời! Hãy xem xét tôi đã chỉnh sửa, thưa ngài! :-) – Scott