2

为什么编译失败:

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 stringswith DummyTraitDummyTraitStringItemMyModule.StringItemDummyTrait

4

0 回答 0