Scala - смешивание признака с его импортом (наследование импорта) - PullRequest
7 голосов
/ 16 февраля 2012

У меня есть следующий код:

trait A {
  import org.somepackage.C._
}

class B extends A {
  def getValue = value
                 ^^^^^
}

object C {
  var value = 5
}

Значение в классе B не видно, что означает, что присущий импорт класса A не был унаследован B, хотя value прекрасно видно внутри A.Как добиться эффекта наследования импорта, чтобы избежать явного импорта одних и тех же вещей в несколько классов, в которых смешивается черта A?

1 Ответ

11 голосов
/ 16 февраля 2012

Импорт, не являющийся объектом первого класса, не демонстрирует ожидаемого поведения. Вместо этого вы можете реструктурировать свой дизайн таким образом, чтобы достичь чего-то близкого:

trait A with C {

}

class B extends A {
  def getValue = value // Now this will work.
}

trait C {
  var value = 5
}

object C extends C

Эта идиома используется в Scalaz 6 для обложения налогом пользователей с минимально возможным импортом.

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