scala - How are "Closures" such a powerful abstraction that object systems and fundamental control structures are implemented using it? -
यहाँ अध्याय 1 से एक उद्धरण है:
क्लोज़र ऐसे एक शक्तिशाली अमूर्त हैं जो वस्तु सिस्टम और मौलिक नियंत्रण संरचनाएं अक्सर उन का उपयोग करके कार्यान्वित की जाती हैं
जाहिर है कि स्टेटमेंट विशेष रूप से स्काला के बारे में नहीं है, लेकिन सामान्य तौर पर क्लोजर लेकिन मैं इसके बारे में बहुत कुछ नहीं समझ सकता। शायद यह उन बुद्धिमान कंपाइलर लेखकों के लिए केवल ज्ञान का मोती है!
तो मौलिक नियंत्रण संरचनाओं को कार्यान्वित करने के लिए क्लोजर का उपयोग कौन करता है और क्यों?
संपादित करें: मुझे ग्रिवि में कस्टम नियंत्रण संरचनाओं के बारे में कुछ पढ़ना "विधि कॉल के अंतिम पैरामीटर के रूप में बंद करने का उपयोग" सिंटैक्स और मेटा-क्लासेस या
उपयोग कीवर्ड के साथ अपने कोड के लिए उपलब्ध संरचना को बनाने में मुझे याद है। क्या यह संबंधित हो सकता है?
संपादित करें: मुझे ग्रूवी कस्टम कंट्रोल स्ट्रक्चर सिंटैक्स (स्लाइड 38) का निम्नलिखित संदर्भ मिला:
< मजबूत> कस्टम नियंत्रण संरचनाएं
बंद करने के लिए धन्यवाद
- जब क्लोजर अंतिम रूप से होते हैं, तो उन्हें रखा जा सकता है ??? outa ???? कोष्ठक के आसपास के पैरामीटर
जब तक (account.balance & gt; 100.euros, {account.debit 100.euros})
- < कोड> जब तक (बोनियन बी, क्लोजर सी)
.0 - हस्ताक्षर
डीईएफ़ जब तक (account.balance & gt; 100.euros) जाहिरा तौर पर जो groovy पेशकश कर रहा है, क्लॉज आधारित कस्टम कंट्रोल स्ट्रक्चर्स बनाने के लिए वाक्यात्मक चीनी है, जो भाषा द्वारा प्रस्तुत प्रथम श्रेणी नियंत्रण संरचनाओं की तरह दिखाई देती है।
मैंने नियंत्रण संरचनाओं के मामले पर टिप्पणी की। मुझे वस्तुओं के रूप में बंद होने पर टिप्पणी दें विचार करें कि जब आप किसी ऑब्जेक्ट पर एक विधि कॉल करते हैं; इसका उपयोग न केवल तर्कसूची के लिए है, बल्कि ऑब्जेक्ट के फ़ील्ड भी है। यही है, विधि / फ़ंक्शन फ़ील्ड पर बंद हो जाता है यह "बेर" फ़ंक्शन से अलग नहीं है (यानी, एक ऑब्जेक्ट विधि नहीं) जो गुंजाइश में चर को बंद कर देता है। हालांकि, ऑब्जेक्ट सिंटैक्स एक अच्छा अमूर्त और मॉड्युलैरिटी तंत्र प्रदान करता है। उदाहरण के लिए, मैं
केस वर्ग स्वागत (संदेश: स्ट्रिंग) {def greet (name: स्ट्रिंग) = println (संदेश + "," + नाम)} val w = स्वागत ("हैलो") w.greet ("डीन")
बनाम।
val संदेश = "नमस्ते" वेल नम = (नाम: स्ट्रिंग) = & gt; वास्तव में, इस उदाहरण में, मैं वेलकम से "केस" कीवर्ड को निकाल सकता हूं, ताकि संदेश नहीं मिल सका। एक क्षेत्र बन गया है, लेकिन मूल्य अब भी क्षेत्र में है:
वर्ग Welcome2 (संदेश: स्ट्रिंग) {// "मामले" DEF नमस्कार (नाम: स्ट्रिंग) = println (message + ", "+ नाम") val w = नया वेलकम 2 ("हैलो") // जोड़ा "नया" w.greet ("डीन")
यह अभी भी काम करता है! अब नमस्कार इनपुट पैरामीटर के मान पर बंद हो जाता है, न कि फ़ील्ड।
var welcome = "हैलो" वेल w2 = नया स्वागत 2 (स्वागत) w2.greet ("डीन") // = & gt; "हैलो, डीन" स्वागत = "गुटेन टैग" w2.greet ("डीन") // = & gt;
लेकिन अगर वर्ग बाहरी क्षेत्र में एक वेरिएबल को सीधे संदर्भित करता है,
class Welcome3 {// "संदेश" डीईएफ नमस्कार (नाम: स्ट्रिंग) = println (स्वागत + "," + नाम) // संदर्भ "स्वागत"} val w3 = नया स्वागत 3 w3.greet ("डीन") // = & gt; "गुटेन टैग, डीन" स्वागत = "बुओन गियोर्नो" w3.greet ("डीन") // = & gt; "बुओन जिओर्नो, डीन"
समझदारी बना?
Comments
Post a Comment