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子类型:此时编译器还不知道。