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)
2番目の質問は、の意味についてval Mon, ... = Valueです。これは、の実装を調べないと、非常に混乱しますEnumeration。これはタイプの割り当てではありません!これは、代わりに保護呼んでいる同じ名前のメソッド、Valueタイプの具体的なインスタンスを返します、Value。
あなたが書くことができるということが起こるval a, b, c = fooScalaで、それぞれの値についてa、bおよびc方法は、foo何度も何度も呼び出されます。Enumerationこのトリックを使用して、各値が個別になるように内部カウンターをインクリメントします。
のScala APIドキュメントを開いてEnumerationをクリックするとVisibility: All、そのメソッドが表示されます。