2013-10-11 5 views
36

में तीर और डबल तीर मैक्रोज़ के बीच अंतर क्लोजर में -> और ->> मैक्रोज़ के बीच क्या अंतर है?क्लोजर

+5

सी [Clojure] (http: // clojuredocs। संगठन/clojure_core/clojure.core/-% 3 ई% 3 ई) [दस्तावेज़] (http://clojuredocs.org/clojure_core/clojure.core/-%3E)। –

उत्तर

65

दस्तावेज़ ए वेबब "क्या" की व्याख्या करने के लिए जुड़ा हुआ है, लेकिन "क्यों" का अच्छा काम नहीं करते हैं।

एक नियम के रूप में, जब कोई कार्य एकवचन विषय पर काम करता है, तो वह विषय पहला तर्क है (उदाहरण के लिए, conj, assoc)। जब कोई अनुक्रम अनुक्रम विषय पर काम करता है, तो वह विषय अंतिम तर्क है (उदा।, map, filter)।

तो, -> और ->> क्रमशः प्रथम और अंतिम बहस सूत्रण के रूप में लिखित हैं, लेकिन यह भी क्रमश: एक या अधिक अनुक्रमिक तर्क के लिए आवेदन के रूप में उन्हें सोचने के लिए उपयोगी है।

उदाहरण के लिए, हम एक विलक्षण वस्तु के रूप में एक सदिश पर विचार कर सकते हैं:

(-> [1 2 3] 
    (conj 4)   ; (conj [1 2 3] 4) 
    (conj 5)   ; (conj [1 2 3 4] 5) 
    (assoc 0 0))  ; (assoc [1 2 3 4 5] 0 0) 
=> [0 2 3 4 5] 

या हम एक दृश्य के रूप में यह विचार कर सकते हैं:

(->> [1 2 3] 
    (map inc)  ; (map inc [1 2 3]) 
    (map inc)  ; (map inc (2 3 4)) 
    (concat [0 2])) ; (concat [0 2] (3 4 5)) 
=> (0 2 3 4 5) 
+19

मुझे क्लोजर फ़ंक्शंस के बीच भेद के बारे में सोचना पड़ता है जो उनके पहले बनाम दूसरे तर्क पर काम करते हैं, क्योंकि तर्क के अनुक्रमिक होने की तुलना में वे अधिक ऑर्डर फ़ंक्शन हैं या नहीं। 'Conj' या' assoc' का पहला तर्क अक्सर अनुक्रमिक होता है, जैसा कि 'मानचित्र' या 'फ़िल्टर' के लिए दूसरा तर्क है। हालांकि, 'मानचित्र' और 'फ़िल्टर' दोनों उच्च आदेश हैं और पहले तर्क के रूप में उनके कार्यात्मक तर्क लेते हैं। तो इसे देखने के इस तरीके में, '- >>' उच्च आदेश कार्यों को चेन करने के लिए उपयोग किया जाता है और '-> अन्यथा। – jbm

+1

एकवचन और अनुक्रमिक तर्कों के बारे में आपका बिंदु मेरे लिए बहुत समझदार बनाता है! मैं अब भी देखता हूं, मैं इन मैक्रोज़ के बारे में उलझन में क्यों था। मुद्दा यह था कि मैंने एकमात्र तर्क के साथ कार्यों को देखा, उदाहरण के लिए। '(-> 42 str)' और '(- >> 42 str)' दोनों रिटर्न '42" '। लेकिन जब मैं ऊपर दिए गए उदाहरण के माध्यम से देखता हूं, तो मेरे लिए चीज स्पष्ट होती है। – avli