2011-11-30 36 views
32

मैं अभी क्लोजर से शुरू कर रहा हूं और डॉक्टर फ़ंक्शन तक नहीं पहुंच सकता।क्लोजर दस्तावेज़ फ़ंक्शन का उपयोग कैसे करें?

मैं emacs24 और swank-clojure के साथ क्लोजर 1.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] 

मैं Why does REPL treat clojure.core/doc as a var? पढ़ चुके हैं और के रूप में सुझाव:

(clojure.repl/doc doc) 

लेकिन फिर भी, मैं प्राप्त :

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

ऐसा लगता है कि मैं सामान्य नामस्थान "आयात" नहीं कर रहा हूं, लेकिन वास्तव में यह नहीं जानता कि इसे कैसे किया जाए।

धन्यवाद।

अद्यतन

जावा (जावा जार ...) से clojure का उपयोग करते हुए यह अच्छी तरह से काम करता है, तो यह Emacs सेटअप के साथ एक समस्या है।

+0

'(डॉक्टर डॉक) 'मेरे क्लोजर रन पर' java -jar clojure-1.3.0.jar' के रूप में ठीक काम करता है। क्या आपने इसे इस तरह इस्तेमाल करने की कोशिश की? – Jan

+0

हां, जावा से सीधे क्लोजर का उपयोग करके अच्छी तरह से काम करता है, इसलिए ऐसा लगता है कि यह मेरे emacs सेटअप के साथ एक समस्या है। जवाब के लिए धन्यवाद। – zaforas

+1

यदि आप Emacs से SLIME का उपयोग कर रहे हैं, तो clojure.repl सामान आपके आरईपीएल में लोड नहीं होता है क्योंकि एसएलईएमई स्वयं ही समकक्ष प्रदान करता है - उदाहरण के लिए, आप [सीसी सीडी डी] के साथ दस्तावेज़ प्राप्त कर सकते हैं (http: // common-lisp .NET/परियोजना/कीचड़/डॉक्टर/एचटीएमएल/दस्तावेज़ीकरण # दस्तावेज़ीकरण) –

उत्तर

49

आप clojure.repl नाम स्थान एक तरह से या किसी अन्य को आकर्षित करने की जरूरत है:

आरईपीएल से

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

या अपने कार्यक्रम में

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

हां। ('clojure.repl) का उपयोग करें। धन्यवाद! – zaforas

+0

अच्छा जवाब, मेरे लिए काम करता है! ओपी और एक टिप्पणी मुझे लगता है कि यह एक संस्करण मुद्दा है - क्या यह मामला है? –

+1

'clojure.repl' नामस्थान स्वचालित रूप से एक प्रतिलिपि सत्र में उपयोग नहीं किया जाता है? क्या मैं कुछ भूल रहा हूँ? –

14

अपने Leiningen उपयोगकर्ता के लिए निम्न जोड़ें .clj फ़ाइल (मैक/लिनक्स पर, यह ~/.lein/user.clj है):

;; ~/.lein/user.clj 
(if (>= (.compareTo (clojure-version) "1.3.0") 0) 
    (do (use 'clojure.repl) 
     (use 'clojure.java.javadoc))) 

इससे लीजिनिंग क्लोजर 1.3.0 और बाद में प्रोजेक्ट के लिए स्टार्टअप पर स्वचालित रूप से उन दो नामस्थानों को आयात करने का कारण बनेंगे (लेकिन क्लोजर 1.2.1 या इससे पहले की परियोजनाओं के लिए नहीं - जहां दस्तावेज़ और स्रोत हमेशा उपलब्ध थे)।

क्रेडिट इसके लिए Matthew Boston पर जाता है। नोट भी Phil Hagelberg's reply जो आरईपीएल-विशिष्ट कार्यक्षमता में से अधिकांश को इंगित करता है सीधे आरईपीएल में कार्यों की आवश्यकता के बिना Emacs/Slime में पहुंच योग्य है।

+1

फिल के उत्तर में एक टाइपो है: सही SLIME दस्तावेज़ कमांड [सी-सी सी-डी डी] (http://common-lisp.net/project/slime/doc/html/Documentation.html#Documentation) है। (साथ ही, यह किसी को कुछ निराशा को बचा सकता है यह जानने के लिए कि user.clj को Leiningen के हाल के संस्करणों में बहिष्कृत किया गया है।) –

+0

चल रहा है [साइडर] (https://github.com/clojure-emacs/cider) '* क्लोजर- संस्करण * '{{: प्रमुख 1,: मामूली 5,: वृद्धिशील 1,: क्वालीफायर शून्य} 'और सहायता प्राप्त करने के लिए फ़ंक्शन नाम दर्ज करना प्रारंभ करने के लिए केवल' सीसी सीडी 'की आवश्यकता है। असल में, यह इस [ट्यूटोरियल] (http://clojure-doc.org/articles/tutorials/emacs.html) के निचले भाग में वर्णित था, लेकिन पुराने, अब काम नहीं कर रहा था, डॉक्टर को पाने का तरीका था। – nymo

4

लें 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 दस्तावेज़ डिफ़ॉल्ट रूप से प्रतिलिपि पर उपलब्ध है।