2010-02-08 11 views

Respuesta

18

El uso de un nombre que no sea "este" puede ser útil cuando usted tiene tipos de miembros que se refieren a la instancia que encierra. Por ejemplo,

trait Outer { self => 
    trait Inner { 
    def outer = self 
    } 
} 

es preferible,

trait Outer { 
    trait Inner { 
    def outer = Outer.this 
    } 
} 

en algunas circunstancias.

6

Puede ser cualquier cosa: self, this, meep, blah, etc. Solo lo utiliza el compilador para determinar a qué clase enviar (al llamar a métodos) y no aparece realmente en bytecode.

Tenga cuidado al nombrar, porque los identificadores locales tienen prioridad sobre la definición del tipo de auto:

trait A { 
    def baz = println("baz!") 
} 
trait B { 
    foo: A => 
    val foo = "hello" 
    // def bar = foo.baz // does not compile because foo is String, not A 
    def bar = foo.substring(1) 
} 
Cuestiones relacionadas