2012-07-26 103 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