无法理解路径依赖类型

时间:2017-07-10 06:01:12

标签: scala

对于C类,您可以使用身体内部熟悉的this来引用当前实例,但this实际上是Scala中C.this的简写:

class C {
   var x = "1"
   def setX1(x:String) = this.x = x
   def setX2(x:String) = C.this.x = x
}

我无法理解C.this,C是一个类,我无法理解为什么我们在Cthis之间使用点,如{{1}所示1}?

1 个答案:

答案 0 :(得分:1)

  

我无法理解为什么我们在C和它之间使用点,如图所示   C.this

this之前使用类名称在Java中称为Qualified this(请参阅Using "this" with class name),在Scala中类似。当您想要从内部类引用外部类时,可以使用它。例如,我们假设您在C课程中有一个方法声明,您希望在其中调用this并表示“C的此引用:

class C {
  val func = new Function0[Unit] {
    override def apply(): Unit = println(this.getClass) 
  }
}

new C().func()

收率:

class A$A150$A$A150$C$$anon$1

您在anon$1名称的末尾看到getClass了吗?这是因为在函数实例中,this实际上是函数类。但是,我们实际上想要引用this类型的C。为此,你做:

class C {
  val func = new Function0[Unit] {
    override def apply(): Unit = println(C.this.getClass)
  }
}

new C().func()

收率:

class A$A152$A$A152$C

注意最后的C而不是anon$1