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のセットアップに問題があります。
Clojure.repl名前空間を何らかの方法で取得する必要があります。
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)))
これにより、Leiningenは、Clojure 1.3.0以降を使用するプロジェクトの起動時にこれら2つの名前空間を自動的にインポートします(ただし、Clojure 1.2.1以前を使用するプロジェクトの場合はそうではありません-ドキュメントとソースが常に利用可能でした)。
クレジットは マシューボストン に行きます。また、 Phil Hagelbergの回答 これは、REPL固有の機能のほとんどが、REPLで直接関数を必要とせずに、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)] }}
ただし、SLIMEに相当するものについては他の回答を参照してください。
これがいつ起こったのかはわかりませんが、lein2.2の時点で doc デフォルトでreplで利用可能です。