给定一个A
,可能有可选字段,a
和b
:可选字段,ADT或?
case class 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
,即不使用我的第一个或第二个实施?
你意识到,选项[A]本身就是一个ADT吧? – pedrofurla
我的第一个想法是反对你的提议,认为Option本身已经提供了一些有用的方法,比如map,flatMap,filter等。但是另一方面A是单形的。 – pedrofurla
一个尝试过的方式(实际上很无聊)是使用'(Option [Int],Option [String])''。但为了弥补这种无聊,我提供了第四种选择,使用Int,String,(Int,String)和None两者的无形副产品。 – pedrofurla