Scala 如何对嵌套事例对象使用播放格式序列化/反序列化宏

Scala 如何对嵌套事例对象使用播放格式序列化/反序列化宏,scala,playframework,Scala,Playframework,所以我有这样一个封闭的特点: sealed trait Foo { override def toString: String = { ... } } 还有一个伴生物体,比如: object Foo { case object Bar extends Foo {} case object Bat extends Foo {} case object Bah extends Foo {} def parse(s: String): Foo = {

所以我有这样一个封闭的特点:

sealed trait Foo {

  override def toString: String = {
    ...
  }
}
还有一个伴生物体,比如:

object Foo {

  case object Bar extends Foo {}

  case object Bat extends Foo {}

  case object Bah extends Foo {}


  def parse(s: String): Foo = {

    ...
  }

  implicit val format: Format[Foo] = Json.format[Foo]

  def apply(f: String): Foo = parse(f)

  def unapply(f: Foo): String = f.toString

}
我希望宏能够工作,因为它满足此处所述的所有要求:

然而,我得到了一个编译时错误,该错误表明Foo没有子类(即使有Bar、Bat和Bah)

如果我将Bar、Bat和Bah移动到Foo之外(到基本包级别),投诉就会消失


只是想知道这是否是宏中的疏忽(在哪里找不到嵌套的子类),或者我在这里做的事情是否不正确?

这是一个宏边缘的情况。您试图在尚未完全结束的作用域中定义宏,它应该在该作用域中显示trait子类型:编译器目前还不知道。这是一个宏边缘情况。您尝试在尚未完全结束的作用域中定义宏,它应该在该作用域中显示trait子类型:此时编译器还不知道。