Ответ 1
Вам необходимо захватить пространство имен clojure.repl так или иначе:
Из REPL
user> (use 'clojure.repl)
user> (doc doc)
или в вашей программе
(ns foobar
(:use [clojure.repl]))
Я только начинаю с Clojure и не могу получить доступ к функции doc.
Я использую Clojure 1.3 с emacs24 и swank- clojure.
user> *clojure-version*
{:major 1, :minor 3, :incremental 0, :qualifier nil}
Но когда я пытаюсь:
(doc doc)
Я получаю:
Unable to resolve symbol: doc in this context
[Thrown class java.lang.RuntimeException]
Я читал Почему REPL относится к clojure.core/doc как к var? и, как было предложено:
(clojure.repl/doc doc)
Но затем я получаю:
clojure.repl
[Thrown class java.lang.ClassNotFoundException]
Кажется, я не "импортирую" обычные пространства имен, но на самом деле не знаю, как это сделать.
Спасибо.
UPDATE
Используя Clojure из java (java -jar...), он работает хорошо, поэтому это проблема с настройкой emacs.
Вам необходимо захватить пространство имен clojure.repl так или иначе:
Из REPL
user> (use 'clojure.repl)
user> (doc doc)
или в вашей программе
(ns foobar
(:use [clojure.repl]))
Добавьте в файл Leiningen user.clj следующее (на Mac/Linux, it ~/.lein/user.clj):
;; ~/.lein/user.clj
(if (>= (.compareTo (clojure-version) "1.3.0") 0)
(do (use 'clojure.repl)
(use 'clojure.java.javadoc)))
Это приведет к тому, что Leiningen автоматически импортирует эти два пространства имен при запуске для проектов с использованием Clojure 1.3.0 и более поздних версий (но не для проектов с использованием Clojure 1.2.1 или более ранних версий), где всегда были доступны документы и источник.
Кредит идет на Мэтью Бостон. Обратите внимание, что Phil Hagelberg reply, в котором указывается, что большинство функций, связанных с REPL, доступны непосредственно в Emacs/Slime, не требуя непосредственно функций REPL.
Начиная с Lein 2, пространства имен могут автоматически импортироваться при запуске с помощью :injections
, например:
;; ~/.lein/profiles.clj
{:user {:plugins [[lein-swank "1.4.4"]
[lein-noir "1.2.1"]
[lein-pprint "1.1.1"]]
:injections [(use 'clojure.repl)
(use 'clojure.java.javadoc)
(use 'clojure.pprint)] }}
Но см. другие ответы для эквивалентов SLIME.
Я не уверен, когда это произошло, но с lein 2.2 doc доступен по умолчанию по умолчанию.