簡體   English   中英

為什么在加載文件“ foofile.clj”之后不能在REPL中引用(defrecord Foo [bar])的結果?

[英]Why can't I reference result of (defrecord Foo [bar]) in REPL after (load-file “foofile.clj”)?

我的文件大致如下所示:

(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,則相同(或基本相似)的代碼會非常花哨(特別是,我關注了此博客文章 )。 這里發生了什么? 在REPL中執行此操作與加載文件有什么不同?

您需要導入Foo,因為它是一個Java類:

(import 'foofile.Foo)

當您在一個repl中輸入代碼時,它起作用的原因是,您在引用Foo (可能是名稱空間user )位於聲明Foo的同一名稱空間中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM