Почему я не могу ссылаться на результат (defrecord Foo [bar]) в REPL после (файл загрузки "foofile.clj")? - PullRequest
2 голосов
/ 06 мая 2011

Мой файл выглядит примерно так:

(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 и загрузкой файла?

1 Ответ

5 голосов
/ 06 мая 2011

Вам необходимо импортировать Foo, так как это класс Java:

(import 'foofile.Foo)

Причина, по которой это работает, когда вы вводите свой код в repl, заключается в том, что вы находитесь в том же пространстве имен, в котором вы объявили Foo, когда ссылаетесь на Foo (возможно, пространство имен user).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...