मैंने क्लोजर प्रतीक देखा है -> कई स्थानों पर उपयोग किया जाता है, लेकिन मुझे इस बात के बारे में अनिश्चितता है कि यह प्रतीक कहलाता है और करता है, या यहां तक कि यह मानक क्लोजर का हिस्सा है या नहीं। क्या कोई मुझे यह समझा सकता है?क्या करता है -> क्लोजर में करें?
उत्तर
स्वीकृत उत्तर भ्रामक है।
-> फ़ंक्शन कॉल के परिणाम का उपयोग करता है और अनुक्रम में, अगले फ़ंक्शन कॉल पर भेजता है।
तो, आसान उदाहरण होगा:
(-> 2 (+ 3))
रिटर्न 5, क्योंकि यह 2 भेजता है, अगले समारोह कॉल (+ 3)
इस पर निर्माण करने के लिए,
(-> 2
(+ 3)
(- 7))
रिटर्न -2। हम पहली कॉल का परिणाम रखते हैं, (+ 3) और इसे दूसरी कॉल (- 7) पर भेजें।
जैसा कि @bending द्वारा नोट किया गया है, स्वीकृत उत्तर डोटो मैक्रो को बेहतर दिखा रहा होगा।
(doto person
(.setFName "Joe")
(.setLName "Bob")
(.setHeight [6 2]))
इसे थ्रेश ऑपरेटर कहा जाता है। यह सबसे अच्छा समझाया गया है here।
यह सच नहीं है। थ्रश एक * फ़ंक्शन * है जो समान रूप से '-> 'से व्यवहार करता है। '->' और '- >> 'मैक्रोज़ हैं, और मैं आमतौर पर उन्हें" थ्रेडिंग "मैक्रोज़ के रूप में संदर्भित करता हूं, क्योंकि वे शेष के माध्यम से पहला रूप" थ्रेड "होते हैं जिसके परिणामस्वरूप एक सिलाई-एक साथ फॉर्म होता है। – amalloy
यह कोड के अंदर बाएं को सही लिखने का एक तरीका है, उदाहरण के अंदर, उदा।
(reduce (map (map xs bar) foo) baz)
हो जाता है
(-> xs (map bar) (map foo) (reduce baz))
आप स्रोत को पढ़ने के लिए चाहते हो सकता है, यह here है।
संपादित करें: ->>
साथ ->
की मेरी भ्रम फिक्स्ड, धन्यवाद amalloy करने के लिए। अफसोस की बात है कि मेरा उदाहरण अब अभ्यास में प्रकट होने की संभावना नहीं है।
मुझे क्लोजर में थ्रश ऑपरेटर की यह स्पष्टीकरण पसंद है: http://debasishg.blogspot.com/2010/04/thrush-in-clojure.html –
यह सामान्यताओं में सही है, लेकिन विशिष्टताओं पर गलत है। आपने '- >>' के व्यवहार का वर्णन किया है, न कि '->'। आपका मुहैया कराया गया नमूना '(कम (नक्शा (नक्शा एक्सएस बार) foo) baz)', क्योंकि '->' * * * * थ्रेड के माध्यम से * पिछला * नहीं है (जो कि '- >>' है)। – amalloy
मुझे खेद है, मैं अपना जवाब ठीक कर दूंगा। –
'->' एक मैक्रो है। सबसे अच्छा तरीका यह वर्णन करने के लिए, मुझे लगता है कि, "डॉट विशेष रूप" है जिसके लिए यह कोड अधिक संक्षिप्त और सुपाठ्य बनाने का उद्देश्य में कार्य करता के रूप में The Dot special form
की clojure.org वेबसाइट के विवरण से दिखाया जाता है के उदाहरण में है(.. System (getProperties) (get "os.name"))
के लिए विस्तारित:
(. (. System (getProperties)) (get "os.name"))
लेकिन, लिखने, पढ़ने और समझने के लिए आसान है। यह भी देखें -> मैक्रो जिसे समान रूप से उपयोग किया जा सकता है:
(-> (System/getProperties) (.get "os.name"))
'डोटो' भी है। मान लीजिए कि आपके पास एक ही ऑब्जेक्ट है जिस पर आप लगातार कई सेटर्स को कॉल करना चाहते हैं। आप 'डोटो' का उपयोग कर सकते हैं।
(doto person
(.setFName "Joe")
(.setLName "Bob")
(.setHeight [6 2]))
उपर्युक्त उदाहरण में सेटर्स कुछ विकल्प नहीं लौटाते हैं, जिससे उपयुक्त विकल्प 'डोटो' बन जाता है। -> 'डोटो' के स्थान पर काम नहीं करेगा जब तक कि सेटर्स 'यह' वापस नहीं लौटे।
तो, ये कुछ तकनीक -> मैक्रो से संबंधित हैं। मुझे उम्मीद है कि न केवल वे क्या करते हैं, बल्कि वे क्यों मौजूद हैं, इसकी व्याख्या करने में मदद करते हैं।
रहा पूरी तरह से नहीं मिला क्या -> (छाले या धागा), जब तक मैं इसे इस तरह से कल्पना किया:
(-> expr f1 f2 f3) ;same as (f3 (f2 (f1 expr)))
(-> expr ;same as form above
f1 ;just a different visual layout
f2
f3)
;this form is equivalant and shows the lists for f1, f2, f3.
(-> expr ; expr treaded into first form
(f1 ) ; | result threaded into next form
(f2 ) ; | and so on...
(f3 )) ; V the lists (f1
(f3 (f2 (f1 expr))) ;the result is the same as this
यहाँ कुछ उदाहरण हैं:
(-> 41 inc dec inc) ;same as (inc (dec (inc 41)))
42
(-> 41 ;same as above but more readable
(inc )
(dec )
(inc ))
42
(inc (dec (inc 41))) ;easier to see equivalence with above form.
42
(-> 4 (* 4 3) (- 6)) ;same as (- (* 4 3 4) 6)
42
(-> 4 ; 4
(* 3 4) ; (* 4 3 4)
(- 6)) ;(- (* 4 3 4) 6)
42
(- (* 4 3 4) 6) ;easier to see equivalence with above form.
42
आप देख सकते हैं अपने लिए:
(macroexpand `(-> 42 inc dec))
- 1. क्लोजर में "^: स्थिर" क्या करता है?
- 2. >> जावा में क्या करता है?
- 3. >> ऑपरेटर सी # में क्या करता है?
- 4. पर्ल में -> तीर क्या करता है?
- 5. सी # में '=>' क्या करता है?
- 6. ExpressionVisitor क्या करता है। <T> क्या करें?
- 7. क्लोजर^कैसे काम करता है?
- 8. सी # में ">>" ऑपरेटर क्या करता है?
- 9. क्लोजर: संकल्प घोषित करता है
- 10. क्या ऑपरेटर करता है '=>' सी # में क्या मतलब है?
- 11. x >>> 0 क्या करता है?
- 12. "base.send: शामिल करें, InstanceMethods" ---> यह क्या करता है?
- 13. जावा बिट मैनिपुलेशन - क्या करता है (num >> = 1) क्या करता है?
- 14. <> ऑपरेटर पायथन में क्या करता है?
- 15. ग्रोवी, क्या करता है -> मतलब
- 16. क्लोजर में #^ऑपरेटर का क्या अर्थ है?
- 17. मेवेन -> अद्यतन परियोजना ... वास्तव में क्या करता है?
- 18. क्या करता है: = छोड़कर> {: no_release => true} Capistrano डीएसएल
- 19. निम्नलिखित क्लोजर प्रोटोकॉल में क्या गलत है?
- 20. क्या क्लोजर में शॉर्ट सर्किट तर्क है?
- 21. क्लोजर काम नहीं करता
- 22. Google क्लोजर तर्क स्वैप क्यों करता है?
- 23. क्लोजर कंपाइलर - क्या एक ++> = 3 ++ ए> 3 हो सकता है?
- 24. क्या क्लोजर में कच्ची स्ट्रिंग है?
- 25. क्लोजर में सामान्य नामकरण नियम क्या है?
- 26. क्लोजर में ~ 'या' ~ का उद्देश्य क्या है?
- 27. <%: %> एएसपी.नेट (एमवीसी 2) में क्या करता है?
- 28. पर्ल में अगर (-f <filename>) क्या करता है?
- 29. जेएसएफ में <h:messages> क्या करता है?
- 30. रेलगाड़ी erb में <%== %> क्या करता है?
यह गलत है। 2 '(+ 3)' के फ़ंक्शन कॉल पर नहीं भेजा जाता है ... इसके बजाय एक मैक्रो कोड (-> एबीसी) 'से' (सी (बीए)) ' –
कहने से कोड को पुन: व्यवस्थित करता है, लेकिन ज्यादातर शब्दों के साथ खेलता है, लेकिन मैं आलोचना स्वीकार करता हूं। स्पष्टीकरण देने के लिए धन्यवाद। –
@nicolas मैं अपना जवाब अपडेट करने का अर्थ रहा हूं क्योंकि जिस दिन मैंने इसे सबमिट किया था क्योंकि यह भ्रमित था, लेकिन वेबसाइट मुझे नहीं जाने देगी। मैंने जवाब के लिए एक लंबे समय से अतिदेय अद्यतन किया। अगर यह अभी भी भ्रामक है तो मुझे बताएं। – Psyllo