Доступ к значению из внешней области, когда присутствует локальный член с тем же именем - PullRequest
12 голосов
/ 31 декабря 2011

Скажем, у меня есть черта со свойством a:

trait TheTrait {
  def a: String
}

У меня есть класс со свойством a, в котором я хочу анонимно создать экземпляр этой черты:

class TheClass {
  val a = "abc"
  val traitInstance = new TheTrait {
    def a = a   // I want to assign it to the `a` of TheClass here
                // but this way it doesn't work
  }
}

Как мне этого добиться?

Ответы [ 2 ]

22 голосов
/ 31 декабря 2011

либо TheClass.this.a, либо присвойте псевдоним this в TheClass (обычно его называют self)

class TheClass { self => 
  val a = "abc"
  val traitInstance = new TheTrait {
    def a = self.a   
  }
}
1 голос
/ 08 августа 2014

Если внешние значения / переменные находятся внутри функционального блока, способ обойти проблему - заключить их в анонимный класс, дав ему конкретное имя. 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 :)

Конечно, использование простых имен также поможет, но в некоторых случаях это означает префикс / постфикс с _ $ и т. Д. Это альтернатива для них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...