Вопрос

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

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

Спасибо.

ОБНОВИТЬ

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

Это было полезно?

Решение

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

Из реплики

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

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

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

Другие советы

Добавьте следующее в свой файл 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)))

Это заставит Лейнинген автоматически импортировать эти два пространства имен при запуске для проектов с использованием Clojure 1.3.0, а затем (но не для проектов, использующих Clojure 1.2.1 или раньше - где DOC и Source всегда были доступны).

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

По состоянию на 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)] }}

Но см. Другие ответы для слизи эквивалентов.

Я не уверен в том, когда это стало так, но как Лейн 2.2 док доступен в Reply по умолчанию.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top