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.