2010-12-04 14 views
13

¿Hay alguna documentación sobre la función "outer =>"? Parece una anotación de tipo propio con un tipo inferido. Sin embargo, tengo la sensación de que estoy equivocado.¿Qué significa "outer =>" en realidad?

Si fuera el caso, ¿es solo una manera diferente de expresar el acceso a super?

trait A extends (B => C) { 
    outer => 
    def apply(x: B): C = outer(x) 
} 

Respuesta

16

No super, pero el alcance externo. Es una forma de aliasar diferentes ámbitos. Por ejemplo:

class A(val x:Int) { thisA => 
class B { 
    val x = 2 
    val y = x + thisA.x // without thisA how could we use A.x instead of B.x ? (*) 
} 
} 

hay una mejor ilustración here.

(*) No existe otra manera de tener el mismo efecto, pero es más allá de esta cuestión.

+0

Gracias por su respuesta. ¿Cómo se expandiría el alcance externo en el ejemplo dado? ¿Exterior (x) sería el método de aplicación de (B => C)? ¿O sería el alcance "este" que es el método de aplicación del rasgo A? ¿O sería D's aplicar si hago una nueva D con A? –

+0

En ambos casos, su ejemplo y la nueva D se extienden A, outer() sería outer.apply() de A. – pedrofurla

+1

Para aquellos tan curiosos como yo, la 'otra forma' es A.this.x. – leedm777

5

Es una forma diferente de acceder this. Es útil en casos en que un this externo sería sombreado por otro this en una clase interna. De esta forma, puede simplemente dar el this externo un adicional (el this original todavía estaría disponible cuando está en el alcance, por lo que no es un nombre de cambio de nombre).