/**
* self不是关键字,是this的别名,具有更强的可读性,无代码中的outer =>
*/
class Self {
self =>
val tmp = "Scala"
def foo = self.tmp + this.tmp //可以用self和this访问自身成员
}
trait S1
/**
* 高级用法:
* 1、如下所示,this:S1合在一起,限定创建S2对象时,必须混入S1
* 2、S2的子类也必须混入S1,如S3
*/
class S2 { this:S1 => }
class S3 extends S2 with S1
trait T {this: S1 => }
object S4 extends T with S1
object Self_Types {
def main(args: Array[String]): Unit = {
class Outer { outer => //outer是Outer.this的别名
val v1 = "Spark"
class Inner {
println(outer.v1) //这里也可以是Outer.this.v1(这里是基本用法)
}
}
val c = new S2 with S1
}
}
scala进阶14-自身类型self type
最新推荐文章于 2023-04-24 18:56:37 发布