【问题标题】:Unpickling when type is unknown类型未知时取消酸洗
【发布时间】:2014-04-08 17:40:36
【问题描述】:

我正在尝试使用 Scala Pickling 来编写一些通用的 unpickling 逻辑。

假设您有两种类型,A 和 B,然后将它们腌制到一个字节数组中。

你把这个字节数组发送到另一台机器上,然后作为字节数组接收。

现在需要解压,但是不知道字节数组是A型还是B型。

您将如何对拆解部分进行编程?你是否让 A 和 B 扩展另一个类型,比如 T,然后调用 unpickle[T],然后对 A 或 B 的结果进行模式匹配?

或者你是否给 T 添加一个实例变量,比如一个字节,它对类型 A 或 B 的实例使用不同的数字,并在此基础上调用 unpickle[A] 或 unpickle[B]?

更新:查看 Scala Pickling 测试套件,我发现最接近的东西是base.scala,它有点遵循第一个选项。

【问题讨论】:

  • 看看 Heather Miller 在泡菜上的 talk

标签: scala scala-pickling


【解决方案1】:

以下作品通过打印进行:

It's A
It's B

代码:

import scala.pickling._
import binary._

object MultiTypePickling extends App {

  sealed abstract class Base
  final class A extends Base { override def toString = "A" }
  final class B extends Base { override def toString = "B" }

  val a = new A
  val pa = a.pickle
  val b = new B
  val pb = b.pickle

  // ----
  pa.value.unpickle[Base] match {
    case aa: A =>
      println("It's " + aa)
    case _ =>
      assert(assertion = false)
  }

  pb.value.unpickle[Base] match {
    case bb: B =>
      println("It's " + bb)
    case _ =>
      assert(assertion = false)
  }

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-15
    • 2015-04-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    相关资源
    最近更新 更多