Частичная анонимная функция в раннем инициализаторе требует "преждевременного доступа к классу"
Почему это не скомпилировать:
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
не могу переопределить это не работает, либо.