我正试图找到一个基本的例子来发挥作用,似乎我在这里遗漏了一些东西。我想尝试一下在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)
}
}我只得到了一个错误:
所引用的特征[A]没有任何子类。这可能是由于标度(SI-7046)的限制而发生的,因为这一特性并不在同一个包装中。如果是这种情况,则可以使用整数常量定义层次结构。
我有两个问题:
发布于 2015-02-20 14:18:27
你有过这样的综合症吗?你可以在这样的问题上花上好几个小时,在问完StackOverflow问题几分钟后你就解决了它?
结果发现,由于特定于编译器的细节,这样一个密封的特征直到文件中定义它的点之后才会知道它的直接子类。所以,在这个例子中,我定义了特征及其案例,是继之后的主要方法,upickle会做它的宏扩展和魔术。在这一点上,它将不知道的特点的情况。如果主方法在定义了特征及其案例之后在同一个文件中移动,它就会工作。
发布于 2016-09-11 18:57:25
我在一个Scala.js项目中遇到了这个错误,在这个项目中,我在服务器和客户机之间共享一个密封的抽象类。
解决方案是使用Typelevel编译器,而不是默认的亮点。
这很容易做到:
build.properties:sbt.version=0.13.13-M1中build.sbt:scalaOrganization in ThisBuild:= "org.typelevel"顶部为了完整起见,这是我现在可以在客户机和服务器之间共享的类:
sealed abstract class ServerResponse
case class Ok(msg: String) extends ServerResponse
case class Failure(msg: String) extends ServerResponsehttps://stackoverflow.com/questions/28630780
复制相似问题