La función parcial anónima en el inicializador temprano requiere "acceso prematuro a la clase"

¿Por qué esto falla al compilar?

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

con el mensaje de error<$anon: Item => String> requires premature access to class Marquee? Me parece que la función parcial no hace uso deMarquee. Sin embargo, esto compila:

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

La primera versión, con la función parcial anónima dentroMarquee, se compila cuandoval strings no es una definición temprana (es decir, si eliminowith DummyTrait) Supongo que es una pista importante, pero no he podido ver cómoDummyTrait podría interferir con cualquier cosa. Alcance explícitoStringItem comoMyModule.StringItem entonces un descendiente deDummyTrait no puede redefinir, tampoco funciona.

Respuestas a la pregunta(0)

Su respuesta a la pregunta