我正在尝试使用一个基本的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)

  }
}

我得到的只是错误:



我有两个问题:
  • 如何使uPickle确信该特征在同一软件包中? (因为它是。)
  • 或者,如果不能,如何使用整数常量定义层次结构?
  • 最佳答案

    您曾经遇到过这样的综合症,您可以在这样的问题上花费多个小时,而在问了StackOverflow问题后几分钟就解决了它?

    事实证明,由于有了compiler-specific details,这种密封的特性直到文件中定义它的点之后才知道其直接子类。因此,在这种情况下,我在主要方法之后定义了特性及其案例,在该方法中upickle会进行宏扩展和魔术处理。在这一点上,它不知道该特征的情况。如果在定义了特征及其大小写之后将main方法移到了同一文件中,它将起作用。

    09-28 04:35