Класс Companion требует импорта методов объекта Companion и вложенных объектов?

Я смотрю на код активатора типов безопасности Akka, и меня заинтриговала следующая конструкция:

Сопутствующий объект:

object MarkerActor {
  sealed trait MarkerMessage
  case object Stop extends MarkerMessage
   ..
  def objectMethod = print("hi from companion object")
}

Сопутствующий класс: он импортирует методы сопутствующего объекта:

class MarkerActor extends Actor with ActorLogging {
    import MarkerActor._   // Comment this line to compare w or w/o import available

    objectMethod  // just to see if 'visible' within companion class

    override def receive = {
      case Stop => {

Так что... это немного удивительно. Почему между классом / объектом-компаньоном нет "особых отношений", позволяющих классу автоматически "видеть" методы объекта?

Обновление Я немного скептически отнесся к этому, и поэтому продолжил и прокомментировал "import MarkerActor._". Это привело к ошибкам "Symbol not found: Stop" в классе Companion. Итак.. импорт действительно требуется.

1 ответ

Решение

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

Другие вопросы по тегам