我在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>
我做错了什么?
答案 0 :(得分:5)
你想说
(require :reload 'guestbook.models.db)
这会重新加载这个命名空间;如果您改为使用:reload-all
,它还将以递归方式直接或间接地重新加载由guestbook.models.db
加载的所有名称空间。
有关详细信息,请参阅(doc require)
。
至于(:reload 'guestbook.models.db)
:
Clojure中的关键字,当用作函数时,会尝试将其第一个参数视为地图以查找自己。例如,(:foo {:foo 1})
返回1
。如果不能对此参数进行处理,则返回nil
。可选地,可以提供第二个参数,作为默认值返回,以防关键字无法在其第一个参数中找到与其自身对应的值(无论是非映射还是没有此条目的映射)键)。