CompilerException java.lang.RuntimeException:无法解析符号: - [Clojure]

Zey*_*nel 4 clojure

save-messageguestbook.models.db命名空间中有这个功能,我试图在repl中运行它,但我得到了这个:

guestbook.models.db> (save-message "A" "Hi"
                                   )
CompilerException java.lang.RuntimeException: Unable to resolve symbol: save-message in this context, compiling:(/private/var/folders/xc/ypy3lqhj08xg2hjc6g81qwl80000gn/T/form-init7598384514150426113.clj:1:1) 
Run Code Online (Sandbox Code Playgroud)

我重新加载并再次尝试,我得到同样的错误

guestbook.models.db> (:reload 'guestbook.models.db)
nil
guestbook.models.db> (save-message "A" "Hi"
                                   )
CompilerException java.lang.RuntimeException: Unable to resolve symbol: save-message in this context, compiling:(/private/var/folders/xc/ypy3lqhj08xg2hjc6g81qwl80000gn/T/form-init7598384514150426113.clj:1:1) 
guestbook.models.db> 
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Mic*_*zyk 5

你想说

(require :reload 'guestbook.models.db)
Run Code Online (Sandbox Code Playgroud)

这会重新加载这个命名空间; 如果您使用:reload-all,它还将递归地重新加载由guestbook.models.db直接或间接加载的所有名称空间.

详情(doc require)请见.


至于(:reload 'guestbook.models.db):

Clojure中的关键字,当用作函数时,会尝试将它们的第一个参数视为一个自我查找的映射.例如,(:foo {:foo 1})返回1.如果不能这样处理这个参数,nil则返回.可选地,可以提供第二个参数,作为默认值返回,以防关键字在其第一个参数中找不到与其自身对应的值(无论是非映射还是没有此条目的映射)键).

  • 您必须使用`in-ns`(或某些直接依赖它的编辑器功能)切换到`guestbook.models.db`而不从源文件加载它.`in-ns`创建完全裸名称空间,甚至不引用`clojure.core`中的符号(参见`(doc refer)`)并且根本不对源文件感兴趣.相反,您应该首先加载源文件(例如使用`require`).加载命名空间后,可以使用`in-ns`切换到它. (2认同)