2011-12-31 7 views

Respuesta

21

ya sea TheClass.this.a, o dar un alias a this en TheClass (llamándolo self es habitual)

class TheClass { self => 
  val a = "abc" 
  val traitInstance = new TheTrait { 
  def a = self.a   
  } 
} 
+0

Esto funciona cuando el miembro externo pertenece a una clase o rasgo. Supongo que no hay forma de escapar del alcance si deseo 'a' referirme a un valor introducido dentro de un bloque de funciones. Simplemente cambie el nombre de esos valores. – akauppi

+0

'self' parece mejor que' TheClass.this'. ¿Cuál es recomendado? – Jus12

1

Si los Vals/vars exteriores están dentro de un bloque de función, una manera de superar el problema es envuélvalos en una clase anónima, dándoles un nombre específico. s.a.

val a=1 
val c = new { val a=a } // does not compile 

val s = new { val a=1 } 
val c = new { val a=s.a } // compiles :) 

Por supuesto también simplemente usando diferentes nombres que hacer el truco, pero hay casos en los que esto significa prefijando/postfixing con _ $, etc Esta es una alternativa para aquellos.

Cuestiones relacionadas