gpt4 book ai didi

scala - 类型未知时取消酸洗

转载 作者:行者123 更新时间:2023-12-02 04:55:27 25 4
gpt4 key购买 nike

我正在尝试使用 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 ,这有点遵循第一个选项。

最佳答案

打印的作品如下:

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

}

关于scala - 类型未知时取消酸洗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22944395/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com