Как использовать функцию clojure doc? - PullRequest
35 голосов
/ 01 декабря 2011

Я только начинаю с 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 как переменную? и как предложено:

(clojure.repl/doc doc)

Но тогда я получаю:

clojure.repl
[Thrown class java.lang.ClassNotFoundException]

Кажется, я не "импортирую" обычные пространства имен, но на самом деле не знаю, как это сделать.

Спасибо.

UPDATE

Использование clojure из java (java -jar ...) работает хорошо, поэтому проблема с настройкой emacs.

Ответы [ 3 ]

54 голосов
/ 01 декабря 2011

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

Из отчета

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

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

(ns foobar
  (:use [clojure.repl]))
15 голосов
/ 29 декабря 2011

Добавьте следующее в свой файл Leiningen user.clj (в Mac / Linux это ~ / .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 или более ранних версий - где документ и источник всегда были доступны).

Кредит поступает на Мэтью Бостон дляэтот.Обратите также внимание на ответ Фила Хейгельберга , в котором указывается, что большинство функций, специфичных для REPL, доступно непосредственно в Emacs / Slime без необходимости использования функций непосредственно в REPL.

4 голосов
/ 24 февраля 2013

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

...