Anonyme Teilfunktion in der frühen Initialisierung erfordert "vorzeitigen Zugriff auf die Klasse"
Warum kann dies nicht kompiliert werden:
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
mit der Fehlermeldung<$anon: Item => String> requires premature access to class Marquee
? Es scheint mir, dass die Teilfunktion keine Verwendung von @ macMarquee
. Doch dies kompiliert:
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
Die erste Version mit der anonymen Teilfunktion inMarquee
, kompiliert, wennval strings
ist keine frühe Definition (dh wenn ich @ entferwith DummyTrait
). Ich denke, das ist ein wichtiger Hinweis, aber ich konnte nicht sehen, wieDummyTrait
könnte alles stören. Explizites ScopingStringItem
wieMyModule.StringItem
so ein Nachkomme vonDummyTrait
kann nicht neu definiert werden, es funktioniert auch nicht.