scala - 可选字段,ADT,还是?

标签 scala

给定一个 A,它可能有可选字段,ab:

案例类 A(a: Option[Int], b: Option[String])

我可以将 A 定义为 Algebraic Data Type .

但是,它需要 4 个子类来解释每个 None/Option 选择:

sealed trait AADT
case class Aa(a: Int) extends AADT
case class Aab(a: Int, b: String) extends AADT
case class Ab(b: String) extends AADT
case object Neither extends AADT

我认为这个 ADT 比上面的 A 选项更可取,后者具有 Option 类型。

但是,对于 3、4 等字段,这种类型可能很快就会失控。

是否有第三种方法来实现 A,即不使用我的第一个或第二个实现?

最佳答案

从代数上讲,有第三个选项涵盖所有组合

sealed trait A
case class Ao(o: Option[(Int, String)]) extends A //all or none
case class Ae(e: Either[Int, String]) extends A //first or second

如果每种情况都有单独的域名,我肯定会选择某种 ADT。

可选字段适用于数据传输对象 (DTO)

关于scala - 可选字段,ADT,还是?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39131289/

相关文章:

scala - 拥有包含 10K 记录的用户静态列表/序列,这是线程安全的吗?

scala - Scala 折叠如何工作?

scala - 如何在 Eclipse 中添加 sbt 和 Play 2.0 可以看到的依赖项

scala - 在 Akka Actors 中使用 Future.sequence 的替代方法

scala - 如何在 Scala 的主构造函数中定义局部 var/val?

scala - NoClassDefFounderror json 4s

scala - lambda () => 1 是否会在每次作为参数传递时在运行时创建对象?

java - Scala 宏和 JVM 的方法大小限制

scala - 为什么我对集合的模式匹配在 Scala 中失败?

scala - S3A 文件系统上的 Spark 历史服务器 : ClassNotFoundException