Частичная анонимная функция в раннем инициализаторе требует "преждевременного доступа к классу"

Почему это не скомпилировать:

trait Item

trait StringItem extends Item {
  def makeString: String
}

trait SomeOtherItem extends Item

trait DummyTrait

case class Marquee(items: Seq[Item]) extends {
  val strings: Seq[String] = items.collect {
    case si: StringItem => si.makeString   // <-- partial function inside braces
  }
} with DummyTrait

с сообщением об ошибке <$anon: Item => String> requires premature access to class Marquee? Мне кажется, что частичная функция не использует Marquee, Все же это компилируется:

val pf: PartialFunction[Item, String] = {
  case si: StringItem => si.makeString
}

case class Marquee(items: Seq[Item]) extends {
  val strings: Seq[String] = items.collect(pf)
} with DummyTrait

Первая версия, с анонимной частичной функцией внутри Marquee, компилируется когда val strings это не раннее определение (то есть, если я удаляю with DummyTrait). Я полагаю, что это важная подсказка, но я не смог увидеть, как DummyTrait может помешать чему угодно. Явно обзор StringItem как MyModule.StringItem так потомок DummyTrait не могу переопределить это не работает, либо.

0 ответов

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