2012-05-02 6 views
12

मैं क्लोजर के लिए अभी भी काफी नया हूं इसलिए अगर मैं पूरी तरह से नौसिखिया प्रश्न पूछता हूं तो मैं क्षमा चाहता हूं लेकिन मुझे पर्याप्त उत्तर ऑनलाइन नहीं मिला।मैं लीनिंगेन के साथ अन्य फाइलों में फ़ंक्शंस को कैसे संदर्भित करूं?

असल में, मेरी समस्या यह है कि किसी भी समय मैं अपने प्रोजेक्ट चलाने का प्रयास, मैं की तरह एक त्रुटि प्राप्त है:

Exception in thread "main" java.lang.RuntimeException: java.io.FileNotFoundException: Could not locate greeter__init.class or greeter.clj on classpath: 

इस मामले में, greeter.clj फ़ाइल के रूप में एक ही निर्देशिका में परियोजना में है मेरा मुख्य कार्य शामिल है।

enter image description here

इस प्रकार core.clj के लिए मेरे कोड है के रूप में:

(ns omg.core 
(require [greeter])) 

(defn -main[] (greet)) 

मेरे कोड

चित्रण प्रयोजनों के लिए, मैं एक परियोजना इस तरह की एक निर्देशिका वृक्ष है कि बना लिया है greeter.clj के लिए है:

(ns greeter) 

(defn greet [] println("Hello world")) 

जब भी मैंटाइप करता हूंमुझे ऊपर उल्लिखित अपवाद मिलता है। मैं क्या गलत कर रहा हूं?

उत्तर

16

स्वागतकर्ता गलत स्तर

(ns omg.greeter) 

नाम स्थान में नाम पर यह नाम स्थान पथ में फ़ोल्डर के अनुरूप तो में फ़ाइल का उपयोग करने /src/omg/greeter.clj कि फ़ाइल भी होनी चाहिए omg.greeter नामस्थान। यदि आप यह सिर्फ greeter बुलाया करना चाहते हैं तो यह नीचे एक फ़ोल्डर

ले जाते हैं require आप समारोह आप बुला रहे हैं के नाम स्थान उल्लेख करने के लिए, इस मामले कि (omg.greeter/greet) होगा में की जरूरत है का उपयोग कर। चूंकि यह एक दर्द है, use फ़ंक्शन को एक नामस्थान की आवश्यकता होती है और वर्तमान नामस्थान में इसके सभी कार्यों को जोड़ती है। नाम स्थान परिभाषा विकल्प का उल्लेख

(ns omg.core 
    (require [omg.greeter :refer :all])) 

या

(ns omg.core 
    (require [omg.greeter :refer [greet]])) 

अधिकांश लोगों को फ़ाइल के शीर्ष पर ns कॉल में नाम स्थान आवश्यकताओं डाल: एक और विकल्प है कि अधिक चयनात्मक है एक साथ की आवश्यकता उपयोग करने के लिए है ।

http://clojure.org/namespaces की एक त्वरित पढ़ा उम्मीद है कि मदद मिलेगी

+1

आर्थर, धन्यवाद आपका जवाब नहीं है और अपने स्पष्टीकरण के लिए बहुत बहुत। मैं वास्तव में इसकी प्रशंसा करता हूँ। मुझे इसकी आवश्यकता को अलग करने और जोड़ने (omg.greeter का उपयोग) को अपने स्थान पर काम करके मिल गया। –

संबंधित मुद्दे