4
我在学习Clojure,至今我无法理解这个我敢肯定基本可笑的小难题。Clojure新手 - 命名空间的烦恼
我有这个文件:
(ns cloapp.core
(:gen-class))
(defn -main
"I don't do a whole lot ... yet."
[& args]
(println "Hello, World!")
(println "Well Hi there, im a string !")
(println "Why wont this work !")
(myFunc "Hiya"))
(defn myFunc [aVar]
(println aVar))
如果我试着和运行此,
lein run
它抱怨说:
Caused by: java.lang.RuntimeException: Unable to resolve symbol: myFunc in this context
但如果我删除调用myFunc from main和do,
lein repl
cloapp.core=> (myFunc "Hiya !")
Hiya !
nil
cloapp.core=>
然后我可以打电话给它。为什么是这样 ?我假设这是与命名空间有关,但阅读它我不能解决它。
一个
有趣的是,这确实有效。我在哪里可以读到这个?是否有相当于前向声明? – AlMcLean
您可以使用'declare'来创建前向声明:(声明myFunc)。还要注意,骆驼案例并不是常规的clojure函数名称,破折号是常规的。 –
好的,没问题 - 谢谢你的抬头。 – AlMcLean