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

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

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)

Ваш ответ на вопрос