3 回答
TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
Enumerationname
object Currency extends Enumeration {
val GBP = Value("GBP")
val EUR = Value("EUR") //etc.}val ccy = Currency.withName("EUR")case objectcase object
sealed trait Currency { def name: String }case object EUR extends Currency { val name = "EUR" }
//etc.case class UnknownCurrency(name: String) extends Currencytrade.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 objectEnumeration
不能遍歷“枚舉”的所有實(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)
