作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 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/
我是一名优秀的程序员,十分优秀!