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

时间:2013-12-29 19:08:16

标签: clojure

我在save-message命名空间中有这个guestbook.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) 

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

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> 

我做错了什么?

1 个答案:

答案 0 :(得分:5)

你想说

(require :reload 'guestbook.models.db)

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

有关详细信息,请参阅(doc require)


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

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