給定一個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