2012-06-30 12 views
12

एक स्वयं प्रकार निम्न उदाहरण की तरह दिखता है:एक स्व प्रकार में '=>' के पीछे क्या कारण है?

trait A { self: String => } 

यह कहते हैं, कि विशेषता A (या इसके एक उप-प्रकार) वर्ग String वारिस चाहिए।

कीवर्ड selfvar s: String में एक चर के लिए : एनालॉग, जहां प्रकार : के बाद आता है द्वारा पीछा किया।

लेकिन => राज्य के लिए एक स्व प्रकार में क्या है? इसके पीछे का कारण क्या है ?

+1

यह सिंटैक्स का एक अजीब बिट है, मुझे लगता है कि यह एक तीर जैसा लगता है जो कुछ इंगित करेगा ... – david

+0

हाँ, स्कैला सीखने की शुरुआत में, मैंने हमेशा सोचा कि तीर शरीर के बाकी हिस्सों को इंगित कर रहा है , एक समारोह की तरह लग रहा था और मुझे बहुत भ्रमित कर रहा था। –

उत्तर

11

बस अनुमान लगाएं ... आपको स्वयं-प्रकार की घोषणा के कुछ विशिष्ट डिलीमीटर की आवश्यकता है। कल्पना करें कि => अभी छोड़ा गया था। this: String एक वाक्य रचनात्मक रूप से मान्य कथन होगा (हालांकि टाइप चेकर शिकायत करेगा)।

तो कौन सी डिलीमीटर होना चाहिए? आप trait A { self: String { ... }} जैसे नेस्टेड ब्रेसिज़ नहीं चाहते हैं। तो जो गैर-जोड़ा मौजूदा डिलीमीटर मौजूद हैं? => एकमात्र ऐसा है जिसे मैं सोच सकता हूं।

=> कहां से कहीं और इस्तेमाल किया जाता है? फ़ंक्शन प्रकारों के लिए चीनी के रूप में (A => B) और फ़ंक्शन निकायों के लिए (i: Int => i + 1)। कॉल-बाय-नाम तर्कों के लिए, और पैटर्न मिलान के मामलों के लिए भी। यह अंतिम उपयोग स्व-प्रकार के साथ कुछ हद तक सुसंगत है। यह किसी विशेष प्रकार के होने के लिए this से मिलान करने जैसा है, और फिर इस 'मैच' के आधार पर शरीर को परिभाषित करना है। मुझे नहीं पता, शायद यह एक मूर्खतापूर्ण समानता है।

+0

उस विषय पर अपने विचार साझा करने के लिए धन्यवाद। मुझे अच्छा लगता है। मैंने एक समान दिशा में खरीदा। –

9

ध्यान दें कि self एक कीवर्ड नहीं है, लेकिन एक सामान्य पहचानकर्ता है। आप self के स्थान पर वास्तव में कोई अन्य मान्य पहचानकर्ता लिख ​​सकते हैं। और अभिव्यक्ति के बाद : एक टाइप टाइप करें, कुछ अभिव्यक्ति मान्य है कहीं भी मान्य है।

=> स्कैला को बताता है कि एक स्व-प्रकार है। अन्यथा, self: Type एक सरल कथन, एक अभिव्यक्ति की तरह दिखता है। उदाहरण के लिए:

class A 
class B extends A { 
    this: A 
} 

यह वैध स्कैला कोड है, और इसमें स्वयं का प्रकार नहीं है।

+0

अच्छा बिंदु, धन्यवाद। क्या '=>' को स्वयं-प्रकार के प्रतीक के रूप में उपयोग करने का कोई ठोस कारण है या क्या इसे अभी उठाया गया है, क्योंकि यह शेष स्कालस सिंटैक्स के लिए अच्छा है? –

+0

@ जॉन थ्रीपवुड ओडर्स्की आरक्षित प्रतीकों और खोजशब्दों के विपरीत है, इसलिए वह उनके पास पुन: उपयोग करने का प्रयास करता है। मुझे लगता है कि जब वह अंडरस्कोर की बात आती है तो वह बहुत दूर चला गया, लेकिन यह वही तरीका है। –

0

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