[解決済み] scalaの列挙を理解する
質問
Scalaの列挙クラスがよくわかりません。私はドキュメントから例をコピーペーストすることができますが、私は何が起こっているのか全くわかりません。
object WeekDay extends Enumeration {
type WeekDay = Value
val Mon, Tue, Wed, Thu, Fri, Sat, Sun = Value
}
import WeekDay._
-
意味
type WeekDay = Value
を意味し、なぜそれを書かなければならないのか? -
は、なぜ
val Mon = Value
? というのはどういう意味なのでしょうか? -
なぜインポートする必要があるのでしょうか?
WeekDay
オブジェクトをインポートしなければならないのでしょうか? と。 -
と書くと
val day = WeekDay.Mon
と書くと、なぜかWeekDay.Value
ではなく、タイプWeekDay
?
どのように解決するのですか?
その
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
. これは型の代入ではありません! これは型の代入ではありません!代わりに protected された
メソッドを呼び出しているのです。
,
Value
型の具象インスタンスを返す
Value
.
と書くことができるのは偶然です。
val a, b, c = foo
と書くと、それぞれの値に対して
a
,
b
そして
c
メソッド
foo
は何度も呼ばれることになります。
Enumeration
はこのトリックを使って内部カウンターをインクリメントし、各値が個別になるようにしています。
の Scala API ドキュメントを開くと、以下のように書かれています。
Enumeration
をクリックすると
Visibility: All
をクリックすると、そのメソッドが表示されます。
関連
-
[解決済み] Scalaのオブジェクトとクラスの違い
-
[解決済み】Scalaのimplicitを理解する。
-
[解決済み] 述語で配列を2つに分割するには?
-
[解決済み] RDDの内容を印刷するには?
-
[解決済み] 依存するメソッドタイプの説得力のある使用例とは?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaでは、'val a. = _' (アンダースコア)は具体的にどのような意味ですか?A = _' (アンダースコア)とはどういう意味ですか?
-
[解決済み] ネストした構造体をよりきれいに更新する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン