2012-06-14 10 views
8

क्लोजर लाइब्रेरी सामान्यतः फ़ंक्शन नामों का पुन: उपयोग क्यों करते हैं नामस्थान उन्हें योग्यता देते हैं? उदाहरण के लिए clojure.zip अगला उपयोग करता है, को प्रतिस्थापित और हटा दें जो क्लोजर कोर में पहले से मौजूद है और "प्रतिस्थापन" पहले से ही clojure.string में मौजूद है।पुस्तकालयों को सामान्य फ़ंक्शन नामों के लिए अद्वितीय नामों का उपयोग करने का प्रयास क्यों नहीं किया जाता है

अब डेवलपर शायद clojure.zip नेमस्पेस के लिए कुछ संक्षेप का उपयोग करेगा, इसलिए एक डेवलपर के कोड में clojure.zip/next नाम/अन्य के रूप में किसी अन्य व्यक्ति के कोड के रूप में योग्य/नामित होगा। यह आपको देखने के लिए मजबूर करेगा क्योंकि नाम अंतरिक्ष नाम वास्तव में क्या है क्योंकि डेवलपर अपनी खुद की लाइब्रेरी बना सकता था जो "अगली"

फ़ंक्शन का उपयोग करता है क्यों नहीं ज़िप, अगला, ज़िप-प्रतिस्थापित करें, और ज़िप-निकालें, str-replace? या

जैसे कुछ लोगों के कोड में एक सतत "नेमस्पेस योग्यता" होगी और यह स्पष्ट होगा कि इन कार्यों का क्या अर्थ है।

ऐसा नहीं है कि पुस्तकालयों के बीच नामों के संघर्ष के हंड्रेन्ड हैं। मैं आमतौर पर केवल दो या तीन देखता हूं। क्या इन नामों को लाइब्रेरी में अनूठा रूप से बनाना मुश्किल है?

उत्तर

20

सामान्य में use लाइब्रेरी का उपयोग करने में शामिल करने के लिए सामान्य में require का उपयोग कर देख clojure कोड है, तो लंबे समय तक अद्वितीय नामों उपयोग कर रहा है कम उपयोगी जब नाम स्थान पहले से ही एक ही अर्थ तो clojure प्रोग्रामर संक्षिप्तता पसंद करते हैं बता देते हैं की तुलना में कम लोकप्रिय है विशिष्टता के लिए।

के बजाय:

(use 'liba 'libb) 

(liba-foo 1 2 3) 
(libb-foo 1 2 2) 

लोग तो लिख सकते हैं:

(require ['liba :as 'a] [libb :as 'b]) 

(a/liba-foo 1 2 3) 
(b/libb-foo 1 2 3) 

जो liba- बनाता मूर्खतापूर्ण लगता है, इसलिए:

(a/foo 1 2 3) 
(b/foo 1 2 3) 
+1

मुझे यह तथ्य पसंद है कि आप नामस्थान के लिए एक छोटे उपनाम का उपयोग कर सकते हैं। आपको अधिक शक्ति देता है, जो क्लोजर में एक आम विषय है। यद्यपि कोई समस्या हो सकती है यदि कुछ प्रोग्रामर मूल नामस्थान से अनुचित उपनाम या यहां तक ​​कि लंबे समय तक उपनाम का उपयोग करते हैं। – adamjmarkham

+1

मैं वास्तव में आपकी सीएल टिप्पणी नहीं समझता; सीएल में बहुत सारे बहुत कम नाम हैं और लंबे समय तक नामस्थान के साथ ऐसा नहीं लगता है। –

+0

मुझे यह स्वीकार करना होगा कि टिप्पणी कुछ पुस्तकालयों के साथ मेरी व्यक्तिगत निराशा से आती है। क्षमा करें सीएल दोस्तों, मैं अच्छा खेलूँगा :-( –

9

आप की आवश्यकता के लिए जा रहे हैं वह नाम वैश्विक रूप से अद्वितीय हैं, नामस्थान क्यों हैं? यदि मैं आइसक्रीम लाइब्रेरी को परिभाषित करता हूं, और हर फंक्शन नाम को आइसक्रीम के साथ उपसर्ग करता हूं, तो कोई भी कभी संघर्ष नहीं कर सकता।

लेकिन यह दोनों पक्षों के लिए बहुत ही असुविधाजनक है - हमें सभी को इस बेवकूफ उपसर्ग को और अधिक टाइप करना होगा। यदि आइसक्रीम-स्कूप के बजाय, मैं सिर्फ नामस्थान आइसक्रीम के अंदर अपने फ़ंक्शन स्कूप का नाम देता हूं, तो आपके पास इसका संदर्भ कैसे है इसका विकल्प है: यदि आप संदर्भ से स्पष्ट हैं तो आप इसे स्कूप कर सकते हैं और आपके नेमस्पेस, या आइसक्रीम/स्कूप, या मिठाई/स्कूप, जो भी आपको इसे अच्छी तरह से पढ़ने की जरूरत है।

+0

इन फ़ंक्शन नामों को प्रतिस्थापित करने, हटाने, रिवर्स इतने आम हैं कि आप यह नहीं बता सकते कि उनका क्या मतलब है यदि वे नाम स्थान योग्य नहीं हैं। इसलिए आपको नाम का नाम उन्हें योग्य बनाना होगा। आप अपने कोड में केवल "प्रतिस्थापन" का उपयोग नहीं कर सकते हैं, अब आप इसका अर्थ लेंगे लेकिन अन्य लोग नहीं करेंगे और उन्हें यह रोकना होगा कि यह किस नामस्थान से संबंधित है। लेकिन अब लोगों के पास नेमस्पेस का विकल्प है जो उन्हें किसी भी abrev के साथ अर्हता प्राप्त करने के लिए है, तो यह भ्रमित हो जाता है। यदि वे नाम स्थान के रूप में योग्य हैं (उदाहरण के लिए) str-replace तो यह हर किसी के कोड में स्पष्ट होगा। –

+0

और मैं लाइब्रेरी में सभी कार्यों के लिए एक उपसर्ग जोड़ने के लिए नहीं कह रहा हूं। केवल उन कार्यों के लिए जिनके पास सामान्य नाम हैं जो अन्य नामस्थानों में फ़ंक्शंस के साथ संघर्ष करने की संभावना रखते हैं। प्रतिस्थापन, रिवर्स इत्यादि के रूप में एसयूएच। ये इतने आम हैं कि वे –

+0

संघर्ष की गारंटी देते हैं तो फिर मेरी 'icecream' लाइब्रेरी में स्कूप, स्वाद, स्वाद, और आइसक्रीम-निकालें का काम होता है? यह स्थिरता के लिए भयानक है - उपयोगकर्ता को यह याद रखना होगा कि नाम में कौन से फ़ंक्शंस में उपसर्ग है और जो नहीं। मैं 'join' और' str-replace 'को कॉल नहीं करना चाहता हूं; 'str/join' और' str/replace' लिखना आसान और पढ़ने में आसान है। – amalloy

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