Scala переменная область видимости вопрос - PullRequest
2 голосов
/ 23 мая 2011

У меня вопрос о синтаксисе scala - скажем, у меня есть простая конструкция шаблона зависимости, подобная следующей

trait Master {
  val foobar

  object SubObject extends SubObject {
      foobar = foobar
  }
}

trait SubObject {
  val foobar
}

Очевидно, что это не скомпилируется, поскольку ссылка foobar = foobar неоднозначна.

Как мне указать, что RHS выражения должен ссылаться на переменную foobar Мастера?Есть ли какое-то специальное использование «это» или «я», о котором я должен знать?

Ответы [ 2 ]

6 голосов
/ 23 мая 2011

Вы можете использовать квалификатор Master.this для конкретной ссылки на внешнюю область видимости, например:

trait Master {
  val foobar = "Hello world"

  object SubObject extends SubObject {
      val foobar = Master.this.foobar
  }
}

trait SubObject {
  val foobar:String
}
5 голосов
/ 23 мая 2011

Я полагаю, что самый простой способ - это использовать определение собственного типа. В дополнение к куче классных теоретико-типовых эффектов, вы можете использовать собственный тип для создания псевдонима «this». (Не проверял это)

trait Master {
  master =>
  val foobar

  object SubObject extends SubObject {
      foobar = master.foobar
  }
}

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