我的文件或多或少看起来像这样:
(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和加载文件之间有什么不同?
答案 0 :(得分:5)
你需要导入Foo,因为它是一个java类:
(import 'foofile.Foo)
当您在repl中输入代码时,它的工作原理是,当您引用Foo
(可能是命名空间user
)时,您在同一名称空间中声明了Foo。