Подтвердить что ты не робот

Как использовать функцию clojure doc?

Я только начинаю с 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.

4b9b3361

Ответ 1

Вам необходимо захватить пространство имен clojure.repl так или иначе:

Из REPL

user> (use 'clojure.repl)
user> (doc doc)

или в вашей программе

(ns foobar
  (:use [clojure.repl]))

Ответ 2

Добавьте в файл 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.

Ответ 3

Начиная с 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 доступен по умолчанию по умолчанию.