我正在尝试使用一个基本的ickickle示例,似乎在这里缺少了一些东西。我想尝试the readme page for upickle上提供的示例
import upickle._
sealed trait A
@key("Bee") case class B(i: Int) extends A
case object C extends A
然后,我的代码是:
object Model {
def main(args: Array[String]): Unit = {
val a = B(5): A
println(a)
val out = write(a)
println(out)
val a2 = read[A](out)
println(a2)
println(a == a2)
}
}
我得到的只是错误:
我有两个问题:
最佳答案
您曾经遇到过这样的综合症,您可以在这样的问题上花费多个小时,而在问了StackOverflow问题后几分钟就解决了它?
事实证明,由于有了compiler-specific details,这种密封的特性直到文件中定义它的点之后才知道其直接子类。因此,在这种情况下,我在主要方法之后定义了特性及其案例,在该方法中upickle会进行宏扩展和魔术处理。在这一点上,它不知道该特征的情况。如果在定义了特征及其大小写之后将main方法移到了同一文件中,它将起作用。