2012-07-26 140 views
4

可能重複:
What does 「outer =>」 really mean?斯卡拉外=>語法

在哪裏可以找到什麼意思外=>

trait After extends Context { outer => xxx 
//... 
} 

的信息?

+0

我想我已經回答了這個地方 – Edmondo1984 2012-07-26 11:22:41

+0

http://stackoverflow.com/questions/11535657/scala-trait-syntax/11535791#11535791 – Edmondo1984 2012-07-26 11:27:51

+0

@ Edmondo1984:IMO,兩個答案都缺乏。你的文章更加簡潔,但並不像這個問題的答案。需要改進之前,任何被巡迴模組尋找點刪除。 – 2015-07-05 02:47:40

回答

13

這是一種自我類型。你也可以添加一個類型註釋來強制這個類,它將你的特質擴展爲某種類型。但是,如果沒有一個類型是剛this參考(和被稱爲自我參照),所以你可以使用它在內部類等。如:

class MyOuter { outer => 
    // this == outer 
    class MyInner { 
    // this != outer 
    def creator = outer 
    } 
} 

我提到例如可以將其他用途使用特殊行爲添加到現有的類:

class MyClass { 
    val foo = "foo" 
} 

trait MyClassExtension { this: MyClass => 
    def fooExtended(s: String) = foo + s 
} 

scala> val x = new MyClass with MyClassExtension 
x: MyClass with MyClassExtension = [email protected] 

scala> x.fooExtended("bar") 
res3: java.lang.String = foobar 

這裏this: MyClass =>手段,即MyClassExtension只能被混合到一個實例或MyClass子類。

scala> class OtherClass 
defined class OtherClass 

scala> val x = new OtherClass with MyClassExtension 
<console>:11: error: illegal inheritance; 
self-type OtherClass with MyClassExtension does not conform to MyClassExtension's selftype MyClassExtension with MyClass 
     val x = new OtherClass with MyClassExtension