में प्रोटोकॉल/बहुआयामी के पर्यावरण पर निर्भर प्रेषण मुझे अपने सॉफ़्टवेयर का एक विशेष टुकड़ा आर्किटेक्चर करने में समस्या का सामना करना पड़ रहा है। आइए कहें, मेरे पास make-temp-dir
(और कई अन्य) नामक एक फ़ंक्शन है जो वर्तमान ओएस के आधार पर कुछ अंधेरे जादू करता है। मैं अलग-अलग नामस्थान में प्रत्येक ओएस के लिए इन विधियों के कार्यान्वयन को सक्षम करने में सक्षम होना चाहता हूं।क्लोजर
सबसे पहले, मुझे विश्वास है कि प्रोटोकॉल (यदि संभव हो) या multimethods का समाधान है। हालांकि, मैंने कभी भी कई नामस्थानों पर फैले कार्यान्वयन के साथ इनका उपयोग करने का एक उदाहरण नहीं देखा है। और मैं यह समझने में सक्षम नहीं हूं कि यह कैसे काम करेगा।
दूसरा, अगर मैं इस के लिए प्रोटोकॉल का उपयोग, मैं तरीकों कुछ
(make-temp-dir current-os arg-1 arg-2)
की तरह किसी तरह कॉल करने के लिए, होगा पहला तर्क हर समय भी अच्छा बेहतर नहीं लगती क्योंकि ओएस गुजर मेरे लिए। अर्थपूर्ण खातिर, मैं चाहता हूं कि make-temp-dir
ओएस के आधार पर बुद्धिमान निर्णय लें। निश्चित रूप से मैं कुछ मैक्रोज़ का उपयोग कर सकता हूं और
(doto current-os
(make-temp-dir arg-1 arg2))
पर कुछ ऐसा कर सकता है लेकिन यह गलत लगता है।
यह कैसे किया जाना चाहिए? या मैं गलत तरीके से जा रहा हूँ? किसी भी मदद की सराहना की।
संपादित करें: ठीक है, @ कोटारक को एक टन धन्यवाद, मैं कुछ काम करने में कामयाब रहा। इस पर ठोकरें, https://gist.github.com/2477120। यह ठीक काम कर रहा है, मुझे लगता है कि मैं इसके साथ जाऊंगा। सबको धन्यवाद।
तो, कोड का दूसरा भाग 'your.utils' नेमस्पेस के अंतर्गत होना चाहिए? साथ ही, '#' 'पाठक मैक्रो क्या है - क्षमा करें, यह नहीं जानते कि इसे कैसे Google पर पहुंचाया जाए;) –
'#' 'को * var quote * कहा जाता है। आप https://groups.google.com/forum/?fromgroups#!topic/clojure/jDBAJD4nWqs पर var उद्धरणों का विवरण पा सकते हैं। – user100464
@ कोटारक, ठीक है, भयानक समाधान। मुझे इसे पचाने के लिए बहुत लंबा लगा लेकिन मुझे लगता है कि मैं समझ रहा हूं कि क्या हो रहा है। हालांकि मुझे अपनी पहली टिप्पणी पर कुछ इनपुट पसंद है। –