我的文件或多或少看起来像这样:
(ns foofile)
(defprotocol foo-protocol
"foo(lish example)"
(foo-method [this] "foo docs")
(defrecord Foo [biz])
(def foo (Foo. "baz"))
我启动 REPL 并输入
(load-file "foofile.clj")
并打印
#'foofile/foo
现在我可以引用 foofile/foo 和 foofile/foo-protocol,但是当我尝试 foofile/Foo 时,我得到
java.lang.Exception: No such var: foofile/Foo (NO_SOURCE_FILE:0)
如果我手动输入 REPL(具体来说,我遵循 this blog post ),相同(或基本相似)的代码就可以正常工作。这里发生了什么?在 REPL 中执行此操作与加载文件有什么不同?
最佳答案
您需要导入 Foo,因为它是一个 java 类:
(import 'foofile.Foo)
当您在 repl 中输入代码时它起作用的原因是,当您引用 Foo
时,您位于声明 Foo 的同一命名空间中(可能是命名空间 user
)。
关于clojure - 为什么我不能在 (load-file "foofile.clj") 之后在 REPL 中引用 (defrecord Foo [bar]) 的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5905775/