2009-10-23 24 views
6

मैं उपयोग बुला एक पुस्तकालय लोड करने के लिए वाक्य रचना को समझने के लिए कोशिश कर रहा हूँ:Clojure समारोह तर्क वाक्य रचना

(use 'clojure.contrib.duck-streams) 

मुझे समझ बनाता है के रूप में यह clojure.contrib.duck धाराओं के लिए इतना बोली पाठक मैक्रो लागू होता है कि पाठक उस स्ट्रिंग का मूल्यांकन करने का प्रयास नहीं करता है।

अब, अगर मैं का उपयोग करना चाहते: मैंने पढ़ा है यह इस में पास मतलब

(use '[clojure.contrib.duck-streams :only reader]) 

: केवल केवल लोड पाठक को टैग करते हैं, यही कारण है कि यह सही है:

(use '[clojure.contrib.duck-streams :only (reader)]) 
बजाय

उपयोग करने के लिए तर्क के वेक्टर लेकिन आरईपीएल शिकायत करता है कि प्रतीक से आईएसईक कैसे बनाएं। पाठक के आसपास माता-पिता क्यों?

यह भी पहली पंक्ति के बराबर और मान्य है:

(use '[clojure.contrib.duck-streams]) 

तो ऐसा लगता है कि कर रहे हैं 'स्ट्रिंग हैं' [स्ट्रिंग] बराबर तर्क जो मैं या तो समझ में नहीं आता।

उत्तर

14

:only प्रतीकों की एक सूची चाहता है। यह ठीक है कि समारोह कैसे लिखा जाता है। refer के लिए डॉकस्ट्रिंग पर ध्यान दें, जो use उपयोग करता है।

refers to all public vars of ns, subject to filters. 
filters can include at most one each of: 

:exclude list-of-symbols 
:only list-of-symbols 
:rename map-of-fromsymbol-tosymbol 

यह इस तरह लिखा गया है कि यदि आप चाहें तो एक से अधिक प्रतीक निर्दिष्ट कर सकते हैं।

(use '[clojure.contrib.duck-streams :only (reader writer)]) 

रूप this recent post में चर्चा की, यदि आप एक समारोह है कि लेता है या तर्क के परिवर्तनशील रिटर्न लिख रहे हैं, यह एक अच्छा विचार है यह हमेशा ले/सूची या वेक्टर वापसी या सेट करने के लिए, भले ही यह है एक आइटम लेना/वापस करना क्योंकि:

  • nil अक्सर "शून्य आइटम" का प्रतिनिधित्व करते थे, seq में सक्षम है। खाली संग्रह भी seq सक्षम हैं।
  • सूची में दो या दो से अधिक आइटम seq सक्षम हैं।
  • यह केवल एक आइटम को seq एक सूची में डालकर सक्षम होने का अर्थ है।

यह एक अजीब होगा कि एक आइटम केस एक विशेष मामला हो। जब आप एक-आइटम को एक प्रकार के अपमानजनक मामले के रूप में देखते हैं और इसे एक सूची में फेंकते हैं तो यह कार्यक्रम के लिए अधिक सुसंगत और आसान होता है।

ध्यान दें कि सभी use इस बात पर ध्यान देते हैं कि :only तर्क प्रतीकों का एक संग्रहणीय संग्रह है। इसका मतलब है सूचियां, वैक्टर और सभी काम सेट करता है।

(use '[clojure.contrib.duck-streams :only [reader writer]]) 
(use '[clojure.contrib.duck-streams :only #{reader writer}]) 

एक एकल Symbol तथापि जिसके कारण आप अपवाद आप कर पाने में सक्षम नहीं seq है।

core.clj में देखें यदि आप देखना चाहते हैं कि यह सब कैसे लागू किया गया है।

1

वे सिर्फ "माता-पिता" नहीं हैं - माता-पिता सूची बनाने के लिए वाक्यविन्यास हैं। यह आइटम के बाद दिखाई देगा: केवल टैग की चीजों की एक सूची होने की उम्मीद है जो यह लागू होता है।

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