自身类型(self type):
格式:this: T =>
trait A { this: Exception => }
this也可替换为self或其它不是关键字的别名。
指定可以混入的类的超类。这个特质只能混入给定类型的子类中。
注:特质extends一个类时,可以保证其混入的类都是该类的子类;而特质指定自身类型时,可以保证它只能混入该类的子类。
class A {this: Exception =>
}
class中的自身类型让类抽象了-该类在实例化时必须满足Exception;相当于构造一个复合类型(A with Exception)。
通常情况,自身类型(self type)是在特质(trait)中的。
自身类型声明为复合类型:
this: X with Y with Z =>
自身类型声明为结构类型:
this: { def close: Unit } =>
this 别名:
格式:self =>
class A { self => // this alisa
val x = 2 def foo = self.x + this.x
}
“self”可以为除this&关键字外的任何字符;因其只是this的别名而已,this也是可以使用的;两者是等价的。
self => 这种写法只是自身类型的一种特殊方式。