1. 程式人生 > >scala進階14-自身型別self type

scala進階14-自身型別self type

/**
  * 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
  }
}