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 = foo
Scalaで、それぞれの値についてa
、b
およびc
方法は、foo
何度も何度も呼び出されます。Enumeration
このトリックを使用して、各値が個別になるように内部カウンターをインクリメントします。
のScala APIドキュメントを開いてEnumeration
をクリックするとVisibility: All
、そのメソッドが表示されます。