2017-05-22 7 views
8

एक उदाहरण परिदृश्य क्या होगा जहां एक आईओ! क्लोजर में ब्लॉक का इस्तेमाल किया जाएगा? मुझे इसके उद्देश्य को समझने में परेशानी हो रही है।आईओ का व्यावहारिक उपयोग क्या है! क्लोजर में ब्लॉक?

+0

इसका कभी भी उपयोग नहीं किया गया, लेकिन ऐसा लगता है कि एक लेनदेन में एक फ़ंक्शन/कोड का उपयोग नहीं किया जाता है। – Carcigenicate

+1

दिलचस्प सवाल ... मैंने मेलिंग सूची की त्वरित खोज की, [एक थ्रेड] (https://groups.google.com/d/msg/clojure/ZZP93tVmot4/DoDBAlDrHmYJ) और [अन्य] (https: // समूह .google.com/d/msg/clojure/TAhNp7rb2Go/Kij920UDKbwJ), और विशेष रूप से [जिस धागे में इसे पेश किया गया था] (https://groups.google.com/d/msg/clojure/JRRegOOwohE/3gWZjmWClpUJ) (और [प्रतिबद्ध] (https://github.com/clojure/clojure/commit/c5e8c6f06292fab26d29cb951d8400394e0f8258))। – glts

+0

धन्यवाद @glts बहुत उपयोगी लिंक। मुझे लगता है कि निम्नलिखित दो उत्तरों ने इसे संक्षेप में सारांशित किया है: "मुझे लगता है कि यह स्पष्ट कोड के साथ कोड के चारों ओर लपेटने के लिए अन्य कोड रोकता है। यह कहने का यह घोषणात्मक तरीका है: मैं आईओ कर रहा हूं! मुझे एक डॉसिंक के अंदर उपयोग न करें।" और "बिंदु साइड-इफेक्टिंग कोड को चिह्नित करना है ताकि आप गलती से लेनदेन में इसका उपयोग न कर सकें।" – Aspasia

उत्तर

5

यह ensuring that code related to IO is not used inside STM transactions. के लिए एसटीएम सिस्टम का हिस्सा है चूंकि क्लोजर लेनदेन का पुन: प्रयास करेगा यदि कोई अन्य थ्रेड लेनदेन चल रहा है, तो विरोधाभासी डेटा करता है, तो उस लेनदेन द्वारा उत्पादित कोई भी आईओ फर्जी होगा क्योंकि यह स्मृति की स्थिति का प्रतिनिधित्व करता है बाहर किया हुआ।

+1

यदि आप [स्रोत] (https://github.com/clojure/clojure/blob/clojure-1.9.0-alpha14/src/clj/clojure/core.clj#L2485) देखते हैं, तो आप देखेंगे लेनदेन प्रगति पर है, तो यह सिर्फ अपवाद फेंकता है, अन्यथा यह शरीर को सामान्य के रूप में निष्पादित करता है। –

+0

यह सहायक लेकिन अमूर्त है। एक उदाहरण परिदृश्य जहां आप वास्तव में इसका उपयोग करेंगे: कहें कि आप कुछ कार्यों के साथ एक पैकेज लिख रहे हैं जो आईओ करते हैं, कुछ उपयोगकर्ता को ज्ञात हैं, कुछ उपयोगकर्ता के लिए अज्ञात हैं। इन सभी में फेंकने और त्रुटि के लिए '(io! & body)' का उपयोग करें, यदि वे असुरक्षित तरीके से उपयोग किए जाते हैं (यानी लेनदेन के भीतर) – jaimedash

+1

पिछले सात वर्षों से क्लोजर में काम कर रहा है, और इसे कभी भी इस्तेमाल नहीं किया है , इसलिए कोई आम उदाहरण दिमाग में नहीं आता है। –

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