A função parcial anônima no inicializador inicial requer "acesso prematuro à classe"

Por que isso falha na compilação:

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

com a mensagem de erro<$anon: Item => String> requires premature access to class Marquee? Parece-me que a função parcial não faz uso deMarquee. No entanto, isso 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

A primeira versão, com a função parcial anônima dentroMarquee, compila quandoval strings não é uma definição inicial (ou seja, se eu removerwith DummyTrait) Eu acho que é uma pista importante, mas não pude ver comoDummyTrait poderia interferir em qualquer coisa. Escopo explicitamenteStringItem ComoMyModule.StringItem então um descendente deDummyTrait Não é possível redefinir que também não funciona.

questionAnswers(0)

yourAnswerToTheQuestion