的Enumeration
性狀具有表示枚舉的單個元件類型成員Value
(它實際上是一個內部類,但差異並不重要這裏)。
因此object WeekDay
繼承該類型的成員。行type WeekDay = Value
只是一個類型別名。它是有用的,因爲你import WeekDay._
導入其他地方後,您可以使用類型,例如:
def isWorkingDay(d: WeekDay) = ! (d == Sat || d == Sun)
取而代之的是,最小的版本也只是:
object WeekDay extends Enumeration {
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
,而你沒有已到導入object WeekDay
的內容,但那麼您將需要使用類型WeekDay.Value
並限定個別成員。因此,例如將成爲
def isWorkingDay(d: WeekDay.Value) = ! (d == WeekDay.Sat || d == WeekDay.Sun)
第二個問題是關於val Mon, ... = Value
意義。如果你不考慮Enumeration
的實現,這確實很令人困惑。這不是一種類型的分配!而是調用同名,Value
的受保護方法,該方法返回Value
類型的具體實例。
恰巧,你可以用Scala編寫val a, b, c = foo
,併爲每個值a
,b
,並c
方法foo
將被一次又一次地叫。 Enumeration
使用這個技巧增加一個內部計數器,以便每個值都是單獨的。
如果您打開Enumeration
的Scala API文檔並單擊Visibility: All
,您將看到該方法出現。
我寫了一個關於scala枚舉和替代的小概述,你可能會覺得它很有用:pedrorijo.com/blog/scala-enums/ – pedrorijo91