使用 spacemacs 和 clojure 的 Hello World 应用程序错误 运行
Error running a Hello World app using spacemacs and clojure
(ns myname.myapp
(:gen-class))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))
运行 "evaluate last sexpression" 与 (println "Hello, World!")
上的标记导致了以下错误:
Show: Project-Only All
Hide: Clojure Java REPL Tooling Duplicates (15 frames hidden)
2 Unhandled clojure.lang.Compiler$CompilerException
Error compiling src/myname/myapp.clj at (0:0)
#:clojure.error{:phase :compile-syntax-check,
:line 0,
:column 0,
:source "/Users/*/dev/myapp/src/myname/myapp.clj"}
Compiler.java: 6808 clojure.lang.Compiler/analyze
Compiler.java: 6745 clojure.lang.Compiler/analyze
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7132 clojure.lang.Compiler/eval
core.clj: 3216 clojure.core/eval
core.clj: 3212 clojure.core/eval
interruptible_eval.clj: 91 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 137 clojure.lang.RestFn/applyTo
core.clj: 665 clojure.core/apply
core.clj: 660 clojure.core/apply
regrow.clj: 20 refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 155 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 190 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 189 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 832 java.lang.Thread/run
1 Caused by java.lang.RuntimeException
Unable to resolve symbol: World! in this context
Util.java: 221 clojure.lang.Util/runtimeException
Compiler.java: 7414 clojure.lang.Compiler/resolveIn
Compiler.java: 7358 clojure.lang.Compiler/resolve
Compiler.java: 7319 clojure.lang.Compiler/analyzeSymbol
Compiler.java: 6768 clojure.lang.Compiler/analyze
Compiler.java: 6745 clojure.lang.Compiler/analyze
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7132 clojure.lang.Compiler/eval
core.clj: 3216 clojure.core/eval
core.clj: 3212 clojure.core/eval
interruptible_eval.clj: 91 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 137 clojure.lang.RestFn/applyTo
core.clj: 665 clojure.core/apply
core.clj: 660 clojure.core/apply
regrow.clj: 20 refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 155 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 190 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 189 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 832 java.lang.Thread/run
我该如何解决这个问题?
您对表单的评估出了点问题。此错误消息:
1 Caused by java.lang.RuntimeException
Unable to resolve symbol: World! in this context
表示编译器看到的字符 World!
周围没有双引号,因此它会查找该名称的不存在变量。
开始使用 lein run
和 lein test
到 run/test 您的代码可能更容易。您还可以克隆 this sample project,其中包含 lein-test-refresh
插件,它甚至比 repl 恕我直言更好。
我的猜测是您没有将光标放在要计算的表达式之后。 "Evaluate last sexp" 应该在您的光标刚好位于您要评估的表单之后时调用。
这里有一个更直观的解释。要使命令起作用,您的光标(表示为 |
)应位于此处:
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!")|)
或此处:
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))|
您也可以尝试 "eval defun"("defun" 在 CIDER 的术语中表示顶级形式)或 "eval buffer"。对于 Clojure/Lisp 的新手来说,这些命令更容易使用。
(ns myname.myapp
(:gen-class))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))
运行 "evaluate last sexpression" 与 (println "Hello, World!")
上的标记导致了以下错误:
Show: Project-Only All
Hide: Clojure Java REPL Tooling Duplicates (15 frames hidden)
2 Unhandled clojure.lang.Compiler$CompilerException
Error compiling src/myname/myapp.clj at (0:0)
#:clojure.error{:phase :compile-syntax-check,
:line 0,
:column 0,
:source "/Users/*/dev/myapp/src/myname/myapp.clj"}
Compiler.java: 6808 clojure.lang.Compiler/analyze
Compiler.java: 6745 clojure.lang.Compiler/analyze
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7132 clojure.lang.Compiler/eval
core.clj: 3216 clojure.core/eval
core.clj: 3212 clojure.core/eval
interruptible_eval.clj: 91 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 137 clojure.lang.RestFn/applyTo
core.clj: 665 clojure.core/apply
core.clj: 660 clojure.core/apply
regrow.clj: 20 refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 155 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 190 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 189 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 832 java.lang.Thread/run
1 Caused by java.lang.RuntimeException
Unable to resolve symbol: World! in this context
Util.java: 221 clojure.lang.Util/runtimeException
Compiler.java: 7414 clojure.lang.Compiler/resolveIn
Compiler.java: 7358 clojure.lang.Compiler/resolve
Compiler.java: 7319 clojure.lang.Compiler/analyzeSymbol
Compiler.java: 6768 clojure.lang.Compiler/analyze
Compiler.java: 6745 clojure.lang.Compiler/analyze
Compiler.java: 7181 clojure.lang.Compiler/eval
Compiler.java: 7132 clojure.lang.Compiler/eval
core.clj: 3216 clojure.core/eval
core.clj: 3212 clojure.core/eval
interruptible_eval.clj: 91 nrepl.middleware.interruptible-eval/evaluate/fn
main.clj: 437 clojure.main/repl/read-eval-print/fn
main.clj: 437 clojure.main/repl/read-eval-print
main.clj: 458 clojure.main/repl/fn
main.clj: 458 clojure.main/repl
main.clj: 368 clojure.main/repl
RestFn.java: 137 clojure.lang.RestFn/applyTo
core.clj: 665 clojure.core/apply
core.clj: 660 clojure.core/apply
regrow.clj: 20 refactor-nrepl.ns.slam.hound.regrow/wrap-clojure-repl/fn
RestFn.java: 1523 clojure.lang.RestFn/invoke
interruptible_eval.clj: 84 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 56 nrepl.middleware.interruptible-eval/evaluate
interruptible_eval.clj: 155 nrepl.middleware.interruptible-eval/interruptible-eval/fn/fn
AFn.java: 22 clojure.lang.AFn/run
session.clj: 190 nrepl.middleware.session/session-exec/main-loop/fn
session.clj: 189 nrepl.middleware.session/session-exec/main-loop
AFn.java: 22 clojure.lang.AFn/run
Thread.java: 832 java.lang.Thread/run
我该如何解决这个问题?
您对表单的评估出了点问题。此错误消息:
1 Caused by java.lang.RuntimeException
Unable to resolve symbol: World! in this context
表示编译器看到的字符 World!
周围没有双引号,因此它会查找该名称的不存在变量。
开始使用 lein run
和 lein test
到 run/test 您的代码可能更容易。您还可以克隆 this sample project,其中包含 lein-test-refresh
插件,它甚至比 repl 恕我直言更好。
我的猜测是您没有将光标放在要计算的表达式之后。 "Evaluate last sexp" 应该在您的光标刚好位于您要评估的表单之后时调用。
这里有一个更直观的解释。要使命令起作用,您的光标(表示为 |
)应位于此处:
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!")|)
或此处:
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!"))|
您也可以尝试 "eval defun"("defun" 在 CIDER 的术语中表示顶级形式)或 "eval buffer"。对于 Clojure/Lisp 的新手来说,这些命令更容易使用。