Я пытаюсь получить документацию, используя функцию Clojure doc
, но не могу распознать ее из REPL (я использую Emacs и SLIME). Следующая последовательность описывает, что происходит (сообщение об ошибке следует сразу после каждой строки):
gaidica.core> (doc first)
; Evaluation aborted.
Unable to resolve symbol: doc in this context
[Thrown class java.lang.Exception]
gaidica.core> (clojure.core/doc first)
; Evaluation aborted.
No such var: clojure.core/doc
[Thrown class java.lang.Exception]
user> (clojure.core/doc first)
; Evaluation aborted.
No such var: clojure.core/doc
[Thrown class java.lang.Exception]
user> (doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
user>
Как мне обратиться к функции doc
и получить ее как функцию, а не переменную?
ADDENDUM, 22.06.11, 9 часов после вопроса
@ kotarak сделал самый соответствующий комментарий: «Обратите внимание, что clojure.core / doc - 1.2 и более ранние. Clojure.repl / doc - 1.3 и более поздние». Конечно же, сработало следующее:
user> (clojure.repl/doc first)
-------------------------
clojure.core/first
([coll])
Returns the first item in the collection. Calls seq on its
argument. If coll is nil, returns nil.
nil
user>
Мне удалось подтвердить, что Clojure 1.3 был активен:
user> *clojure-version*
{:interim true, :major 1, :minor 3, :incremental 0, :qualifier "master"}
user>
Но это тоже сбивало с толку - мой проект Leiningen.clj указал Clojure 1.2!
Из своего собственного опыта я однажды заметил, что REPL на основе SLIME «зависает» от значения пути к классу Java даже после того, как я изменил содержимое соответствующих каталогов. Тогда решение состояло в том, чтобы выйти из Emacs и lein swank
, затем снова ввести оба и повторить попытку. Я попробовал то же самое и получил следующий результат:
user> *clojure-version*
{:major 1, :minor 2, :incremental 0, :qualifier ""}
user>
Единственный вывод, который я могу сделать, - то, что мой предыдущий REPL использовал Clojure 1.3. В проекте, над которым я работал до этого , использовался снимок Clojure 1.3, поэтому я предполагаю, что REPL каким-то образом "завис" на Clojure 1.3.
Проблема решена, урок извлечен и т.д. Что касается бонусных баллов, кто-нибудь может объяснить причину произошедшего (с Clojure 1.2 против 1.3)?
Спасибо всем, кто внес свой вклад.