scala - psicosis - Autorreferencias explícitas sin tipo/diferencia con '''' esto ''''
pensamiento autorreferencial (2)
En ese caso, el self
es otra forma de decir this
.
Sin embargo, si tienes una clase interna, this
dentro de la clase interna sería la clase interna, y el self
sería la clase contenedor.
Esa es la única diferencia AFAIK
Entiendo el uso de auto-referencias explícitamente tipadas :
trait T {
self : T2 =>
...
}
En el cuerpo, el self
es un alias para this
pero tiene el tipo más preciso T with T2
.
Ahora, he visto esto en código:
trait T {
self =>
...
}
Es decir, una autorreferencia explícita sin información de tipo adicional. En esta configuración, ¿hay alguna situación en la que el self
no sea solo un alias para this
?
Es un alias para this
.
Su primer ejemplo es útil para garantizar que el rasgo se haya mezclado en un tipo apropiado y los haga disponibles.
El segundo ejemplo es útil cuando tienes clases internas con conflictos de nombres para hacer que el alcance externo sea visible. Por ejemplo:
trait U {
self =>
val name = "outer"
val b = new AnyRef {
val name = "inner"
println(name)
println(this.name)
println(self.name)
}
}
Entonces new AnyRef with U
imprime
inner
inner
outer
"sí mismo" no es una palabra clave especial: puede usar "bananas =>" o lo que quiera, pero a menudo lo usan las convenciones.
Esto surge bastante en Swing, donde se gana mucho en clases internas (cuadros de texto dentro de scrollpanes, etc.), que generalmente tienen muchos métodos con los mismos nombres que las clases externas.