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

标签 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 中执行此操作与加载文件有什么不同?

最佳答案

您需要导入 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/

相关文章:

clojure - 在 Clojure 中建模游戏 UI 屏幕

clojure - defmethod 捕获所有

clojure - 用于在随机加权选择之间进行选择的惯用 Clojure

sql - 如何使用 Clojure JDBC 插入 Postgres 枚举值?

macos - Clojure 的 Emacs CIDER repl - .profile 中的环境变量丢失

maven - 莱宁根等效于 maven 依赖项 `type` 元素

clojure - 为 clojurescript 添加自定义打印方法

eclipse - 在 Maven/Eclipse 中运行 Storm Starter 项目

recursion - Clojure - 使用 recur 与普通递归函数调用

gradle - 在gradle中执行clojure脚本