2011-11-09 10 views

risposta

35

Si tratta di un alias per this.

Il primo esempio è utile per garantire che il carattere sia stato inserito in un tipo appropriato e rende disponibili tali metodi.

Il secondo esempio è utile quando si hanno classi interne con conflitti di denominazione, per rendere visibile l'ambito esterno. Per esempio:

trait U { 
    self => 
    val name = "outer" 
    val b = new AnyRef { 
    val name = "inner" 
    println(name) 
    println(this.name) 
    println(self.name) 
    } 
} 

Poi new AnyRef with U stampe

inner 
inner 
outer 

"sé" non è una parola chiave speciale - è possibile utilizzare "le banane =>" o quello che vuoi, ma è spesso usato per convenzione.

Ciò si verifica un po 'in Swing, dove si fa molto sulle classi interne (caselle di testo all'interno di scrollpanes, ecc.), Che di solito hanno molti metodi con gli stessi nomi delle classi esterne.

+2

Buoni punti, grazie. Quindi è equivalente al modulo più lungo "U.questo.se" in questo caso, immagino. – Philippe

7

In tal caso self è un altro modo di dire this.

Se si dispone di una classe interna, tuttavia, this all'interno della classe interna sarebbe la classe interna e self sarebbe la classe contenitore.

questa è l'unica differenza per quanto ne so

+0

E probabilmente il suo scopo. – kboom

Problemi correlati