3 回答

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
Enumeration
name
object Currency extends Enumeration { val GBP = Value("GBP") val EUR = Value("EUR") //etc.}
val ccy = Currency.withName("EUR")
case object
case object
sealed trait Currency { def name: String }case object EUR extends Currency { val name = "EUR" } //etc.case class UnknownCurrency(name: String) extends Currency
trade.ccy match { case EUR => case UnknownCurrency(code) =>}
關(guān)于“未知數(shù)(代碼)”模式,除了“破壞”封閉集屬性之外,還有其他方法可以處理不查找貨幣代碼字符串的問題。 Currency
類型。 UnknownCurrency
類型存在 Currency
現(xiàn)在可以潛入API的其他部分。
把那個(gè)箱子推到外面是明智的 Enumeration
并讓客戶處理 Option[Currency]
類型將清楚地表明確實(shí)存在匹配問題,并“鼓勵(lì)”API的用戶自己解決這個(gè)問題。
case object
Enumeration
不能遍歷“枚舉”的所有實(shí)例
..當(dāng)然是這樣,但我發(fā)現(xiàn)在實(shí)踐中這是非常罕見的。 無法從持久化值輕松實(shí)例化
..這也是正確的,但是,除了大量枚舉(例如,所有貨幣)之外,這并不會(huì)帶來很大的開銷。

TA貢獻(xiàn)1835條經(jīng)驗(yàn) 獲得超7個(gè)贊
trait Enum[A] { trait Value { self: A => } val values: List[A]}sealed trait Currency extends Currency.Valueobject Currency extends Enum[Currency] { case object EUR extends Currency case object GBP extends Currency val values = List(EUR, GBP)}
trait Enum[A <: {def name: String}] { trait Value { self: A => _values :+= this } private var _values = List.empty[A] def values = _values}sealed abstract class Currency(val name: String) extends Currency.Valueobject Currency extends Enum[Currency] { val EUR = new Currency("EUR") {} val GBP = new Currency("GBP") {}}
trait Enum[A] { trait Value { self: A => _values :+= this } private var _values = List.empty[A] def values = _values}sealed trait Currency extends Currency.Valueobject Currency extends Enum[Currency] { case object EUR extends Currency case object GBP extends Currency}
object Currency extends Enum[Currency]sealed trait Currency extends Currency.Valuecase object EUR extends Currencycase object GBP extends Currency
添加回答
舉報(bào)