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