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