2010-02-08 70 views
11

ऐसा लगता है कि मिश्रित उदाहरण के संदर्भ में या मिश्रित उदाहरण को बाधित करने के लिए मैं self या this का उपयोग कर सकता हूं। उदाहरण के लिए, वे बराबर हैं?स्वयं करें: टी => और यह: टी => एक विशेषता को परिभाषित करते समय वही अर्थ है?

scala> trait A { self: List[_] => } 
defined trait A 

scala> trait B { this: List[_] => } 
defined trait B 

यह सिर्फ एक सम्मेलन, या कुछ लाभ प्रदान this से कुछ अलग करने का उपयोग कर है?

उत्तर

18

अलावा किसी अन्य नाम का उपयोग करते हुए "इस" उपयोगी जहां सदस्य प्रकार जो संलग्न उदाहरण का उल्लेख है हो सकता है। उदाहरण के लिए,

trait Outer { self => 
    trait Inner { 
    def outer = self 
    } 
} 

, बेहतर है

trait Outer { 
    trait Inner { 
    def outer = Outer.this 
    } 
} 
कुछ परिस्थितियों में

6

यह कुछ भी हो सकता है: स्वयं, यह, मीप, ब्लाह, इत्यादि। यह केवल यह निर्धारित करने में संकलक द्वारा उपयोग किया जाता है कि किस वर्ग को कास्ट करना है (जब उस पर विधियों को कॉल करते हैं) और वास्तव में बाइटकोड में दिखाई नहीं देता है।

लें देखभाल जब नामकरण, क्योंकि स्थानीय पहचानकर्ता स्वयं प्रकार परिभाषा ओवरराइड:

trait A { 
    def baz = println("baz!") 
} 
trait B { 
    foo: A => 
    val foo = "hello" 
    // def bar = foo.baz // does not compile because foo is String, not A 
    def bar = foo.substring(1) 
} 
संबंधित मुद्दे