2011-05-27 14 views
9

मैं स्काला के लिए नया हूं और O'Reilly से प्रोग्रामिंग स्कैला पुस्तक में लेखकों ने कुछ कोड दिखाया है जो एक विशेषता को तत्काल बनाता है। यह देखते हुए कि जावा कुछ हद तक जावा में इंटरफेस के समान हैं (हालांकि मुझे पता है कि बाइट कोड में कक्षाओं के रूप में गुण लागू किए जाते हैं), इसका गुण तत्काल करने का क्या अर्थ है, और इसके लिए उचित उपयोग केस/डिज़ाइन पैटर्न क्या होगा?एक विशेषता को तत्काल करने का क्या अर्थ है?

उदाहरण के लिए:

scala> val x = new T1 with T2 { type z = String val v: z = "Z" } 
x: java.lang.Object with T1 with T2{type z = String; def zv: this.z} = [email protected] 

उत्तर

17

मैं भी यथोचित स्काला के लिए नया हूँ, लेकिन मैं उदाहरण है कि आप ऊपर एक नई अज्ञात वस्तु बनाने की है है (जैसे आप जावा के साथ क्या कर सकते हैं), और फिर संलग्न लगता है नए अनाम प्रकार के लिए विशेषता।

चूंकि स्कैला लक्षणों में कार्यान्वयन कोड हो सकता है, इसलिए आपको मूल रूप से ट्राइट का व्यवहार मुफ्त में मिलता है, यह मानते हुए कि अज्ञात वर्ग विशेषता के किसी भी आवश्यकता को पूरा करता है (जैसे मूल्य निर्धारित करना, या "अमूर्त" विधियों को परिभाषित करना)।

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

क्या यह आपके प्रश्न का उत्तर देता है?

+1

हां जो बहुत समझ में आता है, धन्यवाद! +1 –

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