我有一个在guestbook.models.db
命名空间中的 save-message
函数,我试图在 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>
我做错了什么吗?
(require :reload 'guestbook.models.db)
时,我得到了相同的错误:guestbook.models.db> (require :reload 'guestbook.models.db) CompilerException java.lang.RuntimeException: Unable to resolve symbol: require in this context, compiling:(/private/var/folders/xc/ypy3lqhj08xg2hjc6g81qwl80000gn/T/form-init7598384514150426113.clj:1:1)
- Zeynelin-ns
还是某种仅限于编辑器的东西吗? 在使用in-ns
切换之前,您需要在REPL中(require 'guestbook.models.db)
(或者使用编辑器的函数正确加载命名空间),否则您将切换到一个新创建的此名称命名空间而没有引入诸如clojure.core
等基本脚手架,显然在这里发生了这种情况。 - Michał Marczyk(clojure.core/require :reload 'guestbook.models.db)
来解决这个问题。 - Michał Marczykin-ns
(或一些直接依赖它的编辑器功能)来切换到guestbook.models.db
,而不是从源文件中加载它。in-ns
创建完全裸露的命名空间,甚至不引用clojure.core
中的符号(参见(doc refer)
),并且根本不关心源文件。相反,您应该首先加载源文件(例如使用require
)。一旦命名空间被加载,就可以使用in-ns
来切换到它。 - Michał Marczyk(ns foo)
不会从磁盘加载foo
- 如果不存在,它将创建一个名为foo
的新命名空间。因此,是的,您需要require
或use
您的命名空间。 - Michał Marczyk