2010-06-18 19 views
17

स्कैला निहितार्थ बहुत शक्तिशाली हैं। मैं उत्सुक हूं अगर वे स्कैला की एक नई/अनूठी विशेषता है, या अवधारणा पहले से ही अन्य प्रोग्रामिंग भाषाओं में मौजूद है।अन्य प्रोग्रामिंग भाषाएं जो "ला लाला" प्रत्यारोपण का समर्थन करती हैं

धन्यवाद।

संपादित:

मेरे सवाल का स्पष्ट करने के लिए, हाँ, मैं इस ठोस कार्यान्वयन के बारे में बात कर रहा हूँ। चारों ओर "निहित चीजें" होने पर पहले अजीब लग रहा था, लेकिन थोड़ी देर के लिए इसका इस्तेमाल किया और यह देखकर कि दूसरों ने इसका इस्तेमाल कैसे किया, मैं इससे प्रभावित हूं कि यह कितना अच्छा काम करता है।

+0

मुझे लगता है कि आपको निहित तरीकों और निहित मूल्यों के बीच अंतर करना चाहिए। मुझे लगता है कि यह काफी संभव है कि एक भाषा केवल उनमें से एक का समर्थन करती है। बेशक, दोनों ने आगे की संभावनाओं के लिए द्वार खोल दिया है, जैसा कि पहले से ही "प्रकार के वर्गों का अनुकरण" समाधान है, जो वास्तव में उनमें से एक स्मार्ट संयोजन है। –

+0

मैं अंतर्निहित रूपांतरण और निहित मूल्य/पैरामीटर दोनों को संदर्भित करने के लिए * implicits * शब्द का उपयोग कर रहा हूं। मुझे लगता है कि यह स्कैला संदर्भ में "सामान्य" व्याख्या है लेकिन शायद मैं गलत हूं। – gerferra

+0

@ डैनियल बहुत धन्यवाद!मैंने नोट और आपके संदेश को हटाने का सवाल संपादित किया। एक बार फिर धन्यवाद। – gerferra

उत्तर

14

लग रहा है प्रेरणा की तरह हास्केल के प्रकार वर्गों था। कम से कम एक ब्लॉग आलेख का दावा है कि implicits have their origin in Haskell type classes; लेख मार्टिन ओडर्स्की द्वारा 2006 के एक पेपर को संदर्भित करता है, Poor Man's Type Classes। और डैनियल सोब्राल ने हाल ही में एक लेख लिखा है कि कैसे simulate type classes with implicits पर।

+0

दरअसल, उन चीजों में से एक जो मुझे और अधिक प्रभावित करता है वह है * टाइप ऑर्डर चीज * 'ऑर्डरिंग' और 'न्यूमेरिक' में उपयोग किया जाता है। संदर्भों के लिए धन्यवाद! – gerferra

+6

इम्प्लीकेट्स टाइप क्लास की तुलना में बहुत अधिक सामान्य हैं, हालांकि। उदाहरण के लिए, आप संकलक को आपके लिए भरने की बजाय, हमेशा एक अंतर्निहित पैरामीटर को स्पष्ट रूप से पास करना चुन सकते हैं। जबकि हास्केल टाइपक्लास में हमेशा कंपाइलर द्वारा किया जाता है। –

1

यह इस बात पर निर्भर करता है कि आप "implicits का समर्थन करता है" वाक्यांश को व्यापक रूप से कैसे फैलाना चाहते हैं। स्कैला में प्रत्यारोपण के लिए अनिवार्य कारणों में से एक अनिवार्य रूप से मौजूदा वर्ग में विधियों को जोड़ना है (जिनके पास आपके पास पहुंच नहीं है)। यह अलग-अलग संरचनाओं के माध्यम से अन्य भाषाओं में संभव है: उदाहरण के लिए, स्मॉलटाक, रूबी, और ऑब्जेक्टिव-सी उन वर्गों को जोड़ने के सभी समर्थन जो आप नियंत्रित नहीं करते हैं।

1

यदि मैं http://patricklogan.blogspot.com/2007/06/scala-implicits.html से सही ढंग से implicits समझता हूं तो हाँ, कई भाषाओं में इसका समर्थन किया जाता है।

सर्वश्रेष्ठ उदाहरण सी # एक्सटेंशन विधियां हैं। एक हालिया उदाहरण जहां मैंने उन्हें इस्तेमाल किया:

मुझे अक्सर दो Point एस के बीच दूरी की गणना करना पड़ता था। एक Point एक और बात करने के लिए दूरी की गणना करने के लिए कोई विधि है तो मैं अपने प्रोजेक्ट के लिए निम्न कोड कहा:

class MyPointExtension 
{ 
    public static Double GetDistance(this Point p1, Point p2) 
    { 
    return /* the pythagoras code */ 
    } 
} 

मैं तो कर सकता है:

Point unitPosition = new Point(x,y); 
Point target = new Point(x2,y2); 
Double distance = unitPosition.GetDistance(target); 
+8

स्कैला निहितार्थ सी # एक्सटेंशन विधियों की तुलना में अधिक शक्तिशाली हैं। ओडर्स्की के शब्दों में * "[सी # में] आप केवल विधियों को जोड़ सकते हैं, न कि फ़ील्ड या इंटरफेस को कक्षा में * *। यहां देखें http://www.artima.com/weblogs/viewpost.jsp?thread=179766 – gerferra

+5

मैं @ german1981 से सहमत हूं, विस्तार विधियां स्कैला निहितार्थों के लिए उपयोग में से एक हैं, लेकिन इसमें कोई भी प्रकोप नहीं है। –

1

हालांकि स्कैला के रूप में उतना शक्तिशाली नहीं है, सी ++ में पहले से ही रूपांतरण ऑपरेटर और कॉपी कन्स्ट्रक्टर थे जो दोनों अंतर्निहित प्रकार के रूपांतरणों को जन्म दे सकते थे। बाइनरी ऑपरेटरों को परिभाषित करने की क्षमता के साथ संयोजन (कुछ स्कैला अनुमति नहीं देता है) इसने स्काला के प्रभावों की कुछ शक्तियां प्रदान कीं।

5

2000 में प्रोग्रामिंग लैनेज (पीओपीएल) के प्रिंसिपल में वास्तव में एक अच्छा पेपर था, जिसने implicit parameters पेश किया। उन्हें हास्केल में लागू किया गया है। मुझे यकीन है कि स्कैला के डिजाइनर मार्टिन ओडर्स्की को इस काम से अवगत था। (मार्टिन पीओपीएल में एक लगातार और स्वागत भागीदार है और योगदानकर्ता है।)