उसकी टिप्पणी में आपका उल्लेख @cchantep के रूप में, इस मामले में self : T
एक स्वयं प्रकार एनोटेशन मूल रूप से कह रही है कि Foo[T]
जरूरतों का एक उदाहरण यह भी एक T
के रूप में व्यवहार करने के लिए है। आप देख सकते हैं कि FooImpl
में FooImpl <: Foo
के रूप में वास्तव में यह मामला है।
आप स्वयं प्रकार एनोटेशन here, here या here के बारे में अधिक जानकारी प्राप्त कर सकते हैं। ध्यान दें कि, अधिकांश बार, आप इसे निर्भरता इंजेक्शन और केक पैटर्न के संदर्भ में उपयोग करेंगे।
दूसरे शब्दों में, क्या ऐसा करने का बिंदु है:
the second link से अधिकांश दिलचस्प मैं प्रारंभिक खंड लगता है
trait A
trait B { this: A => }
जब तुम सिर्फ बजाय सकता है ऐसा करें:
trait A
trait B extends A
आपको [इस वाक्यविन्यास] का उपयोग क्यों करना चाहिए?
[...] उत्तर आम तौर पर "बी की आवश्यकता ए" (एनोटेशन) बनाम "बी बी ए ए" (विरासत) के रूप में आता है और यह कि निर्भरता प्रबंधन के लिए पूर्व बेहतर है।
अंत में, और केवल स्पष्टीकरण के लिए, ध्यान दें कि self
शब्द बिल्कुल आवश्यक नहीं है। यह कोई मान्य चर नाम हो सकता है, लेकिन self
या this
एक सम्मेलन के रूप में अधिकतर समय हो सकता है। यही है, आप कर सकते हैं:
trait A
trait B { myVar: A => }
लेकिन यह कम आम होगा।
यह एक स्व प्रकार है जो लागू करता है कि 'फू' का कोई उप प्रकार स्वयं 'फू' को दिया गया प्रकार पैरामीटर होना चाहिए – cchantep