为什么我不能在REPL之后引用(defrecord Foo [bar])的结果(load-file“foofile.clj”)?

时间:2011-05-06 01:00:30

标签: clojure

我的文件或多或少看起来像这样:

(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和加载文件之间有什么不同?

1 个答案:

答案 0 :(得分:5)

你需要导入Foo,因为它是一个java类:

(import 'foofile.Foo)

当您在repl中输入代码时,它的工作原理是,当您引用Foo(可能是命名空间user)时,您在同一名称空间中声明了Foo。