3

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

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

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

现在你需要 unpickle 它,但是你不知道字节数组是用于类型 A 还是类型 B。

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

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

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

4

1 回答 1

0

以下作品通过打印:

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)
  }

}
于 2014-04-10T06:11:39.570 回答