आप require
समारोह रद्द कर सकते थे और निश्चित रूप से ओवरराइड संस्करण सामान डाउनलोड कर सकते हैं, तो इसके लिए नाम स्थान में पूछा गया था classpath पर उपलब्ध नहीं है। रूपों में काम करने के तरीके को ओवरराइड करना, AFAIK, अब ns
को संभालने के तरीके के कारण असंभव है।
ध्यान दें कि 'require
' डाउनलोड करना बहुत उपयोगी नहीं होगा यदि आप क्लासपाथ (नए जार समेत) पर नए पथ रखना चाहते हैं, क्योंकि क्लासपाथ इंजेक्शन क्लोजर में विश्वसनीय रूप से काम नहीं करता है (जेवीएम मुद्दों के कारण) । वहां clojure.core/add-classpath
है ... लेकिन इसे हमेशा के लिए अब से बहिष्कृत के रूप में चिह्नित किया गया है, इसका उपयोग दृढ़ता से निराश है, इस बात की कोई गारंटी नहीं है कि यह आपके लिए काम करेगा और यह स्थिति जल्द ही कभी भी बदलने की संभावना नहीं है। दूसरी तरफ, यदि आप किसी निर्देशिका में नई स्रोत फ़ाइलों को रखना चाहते थे जो क्लासपाथ पर पहले से मौजूद था, तो उसे ठीक काम करना चाहिए।
मामले में आप अधिभावी require
के साथ चारों ओर खेलने के लिए, यदि आप एक foo
नाम स्थान है, तो आप
(ns foo
(:refer-clojure :exclude [require])
; other stuff; any :requires here will work as usual!
)
कर सकता है तो फिर परिभाषित करना चाहते हैं अपनी खुद की आवश्यकता होती है, clojure.core/require
का उपयोग करते समय उचित:
(defn require [ns-symbol]
(do-stuff-to-obtain-the-namespace))
clojure.contrib.find-namespaces
नेमस्पेस क्लासपाथ पर उपलब्ध चीज़ों को जानने में सहायक हो सकता है। (या आप the-ns
समारोह का उपयोग करें और देखें कि क्या वह clojure.core/require
के माध्यम से नाम स्थान की आवश्यकता होती है पर एक प्रारंभिक प्रयास के बाद एक अपवाद फेंकता सकता है।)
ध्यान दें कि binding
दृष्टिकोण है जो पहले दिमाग में आ सकते हैं ((binding [require ...] ...)
) काम नहीं करेगा, के बाद से require
आम तौर पर एक वार clojure.core
नाम स्थान और नामस्थान जिनके नाम clojure
के साथ शुरू वर्तमान में सीधे संकलक से जुड़े हुए हैं से Vars में प्रशिक्षु पर ले कर (कोई वास्तविक वार देखने अर्थ क्रम में किया जाता है, इसलिए उन Vars की rebinding कोड पर कोई प्रभाव नहीं) ।
(:refer-clojure :exclude [require])
अपने नाम स्थान के लिए ns
रूप में clojure.core/require
को हल करने से require
रोकता है और आप अपने खुद के नाम स्थान में उस नाम का एक वार को परिभाषित करने के लिए स्वतंत्र छोड़ देता है। जैसा ऊपर बताया गया है, यह clojure.core/require
Var को सुलभ होने से नहीं रोकता है यदि आप पूरी तरह योग्य प्रतीक टाइप करते हैं।
दिलचस्प। मुझे लगता है कि नामस्थान वर्कअराउंड का उपयोग करने से बचने के लिए "उन्नत-आवश्यकता" जैसे किसी भिन्न फ़ंक्शन नाम का उपयोग करना बेहतर हो सकता है। (मैं कुल नोब हूं, इसलिए अगर मैं बकवास बोल रहा हूं तो मुझे सही करें। :)) – StackedCrooked
इसके विपरीत, यह इसके बारे में जाने का एक बेहतर तरीका प्रतीत होता है।मुझे यह कहना है कि, व्यावहारिक शर्तों में, * सर्वश्रेष्ठ * तरीका, लीनिंगेन/मेवेन को किसी लाइब्रेरी निर्भरता प्राप्त करना होगा, और किताबों के साथ स्रोत कोड जैसी चीजों के लिए, बस इसे हाथ से डाउनलोड करें ...: -) यह नहीं कि एक फंकी आवश्यकता लिखने के मजे से कुछ भी लेता है जो स्वयं ही ऐसा करेगा! –