为什么编译失败:
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