web-dev-qa-db-ja.com

clojure doc関数の使い方は?

Clojureを使い始めたばかりで、doc関数にアクセスできません。

私はemacs24とswank-clojureでclojure1.3を使用しています。

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]

私は通常の名前空間を「インポート」していないようですが、実際にはその方法がわかりません。

ありがとう。

[〜#〜]更新[〜#〜]

Java(Java -jar ...)からclojureを使用すると、うまく機能するため、emacsのセットアップに問題があります。

37
zaforas

Clojure.repl名前空間を何らかの方法で取得する必要があります。

REPLから

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

またはあなたのプログラムで

(ns foobar
  (:use [clojure.repl]))
59
Julien Chastang

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以降を使用するプロジェクトの起動時にこれら2つの名前空間を自動的にインポートします(ただし、Clojure 1.2.1以前を使用するプロジェクトの場合はそうではありません-ドキュメントとソースが常に利用可能でした)。

クレジットは マシューボストン に行きます。また、 Phil Hagelbergの回答 これは、REPL固有の機能のほとんどが、REPLで直接関数を必要とせずに、Emacs/Slimeで直接アクセスできることを示しています。

15
Sean Corfield

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に相当するものについては他の回答を参照してください。

これがいつ起こったのかはわかりませんが、lein2.2の時点で doc デフォルトでreplで利用可能です。

4
Joffer