2017-07-10 1 views
2

Für eine Klasse C verstehen, können Sie die vertraute this im Inneren des Körpers auf die aktuelle Instanz verweisen verwenden können, aber this ist eigentlich eine Abkürzung für C.this in Scala:Kann nicht pfadabhängig Typ

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

ich kann einfach nicht verstehen C.this, C ist eine Klasse, kann ich nicht verstehen, warum wir Punkt verwenden, um zwischen C und this wie in C.this gezeigt?

Antwort

1

Ich kann nicht verstehen, warum wir Punkt zwischen C verwenden und diese wie in C.this

Mit dem Klassennamen vor this heißt ein Qualified this in Java (siehe Using "this" with class name) und ist gezeigt ähnlich in Scala. Sie verwenden es, wenn Sie eine äußere Klasse von einer inneren Klasse referenzieren möchten. Nehmen wir zum Beispiel an, dass Sie in Ihrer C Klasse eine Methode Erklärung hatte, wo man this und bedeutet „die diese Referenz von C nennen wollte:

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

new C().func() 

Ausbeuten:

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

Sie sehen die anon$1 an das Ende des getClass Namen? Es ist in der Funktion Beispiel, weil diese this tatsächlich der Funktionsklasse ist. Aber wir die this Art von C stattdessen tatsächlich verweisen wollten. F oder das, was Sie tun:

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

new C().func() 

Ausbeuten:

class A$A152$A$A152$C 

Beachten Sie die C am Ende statt anon$1.

+1

Thanks @ yuval-itzchakov für die hilfreiche Antwort .. – Tom

Verwandte Themen