[解決済み】ScalaのCaseオブジェクトとEnumerationsの比較
質問
を使用する際のベストプラクティスのガイドラインはありますか? ケースクラス (またはケースオブジェクト)とEnumerationを拡張することの違いについて教えてください。
同じような利点があるようです。
どのように解決するのか?
大きな違いは
Enumeration
をインスタンス化するためのサポートが付属しています。
name
文字列です。例えば
object Currency extends Enumeration {
val GBP = Value("GBP")
val EUR = Value("EUR") //etc.
}
それなら、できるはずです。
val ccy = Currency.withName("EUR")
これは、列挙をデータベースなどに永続化したい場合や、ファイルにあるデータから列挙を作成したい場合に便利です。しかし、一般的にScalaでは列挙は少し不器用で、厄介なアドオンのような感じがします。
case object
s. A
case object
は enum よりも柔軟です。
sealed trait Currency { def name: String }
case object EUR extends Currency { val name = "EUR" } //etc.
case class UnknownCurrency(name: String) extends Currency
それで、今、私が持っている利点は...
trade.ccy match {
case EUR =>
case UnknownCurrency(code) =>
}
として カオス3平衡 のご指摘をいただきました(読みやすくするために一部修正しました)。
UnknownCurrency(code)" パターンについて、通貨コード文字列が見つからない場合、quot;break" の閉集合の性質以外に対処する方法があります。
Currency
型を使用します。UnknownCurrency
しょくしゅせいCurrency
がAPIの他の部分に忍び込むことができるようになった。このような場合は
Enumeration
を処理させ、クライアントはOption[Currency]
のようなタイプは、マッチングに問題があることを明確に示し、APIの利用者が自分で解決することを奨励します。
ここでの他の回答のフォローアップになりますが、主な欠点は
case object
よりも
Enumeration
sは
-
enumeration" のすべてのインスタンスに対して反復処理できません。 . 確かにそうなのですが、実際にはこれが必要なケースは極めて稀だと思います。
-
永続化された値から簡単にインスタンス化できない . これも事実ですが、巨大な列挙(たとえば、すべての通貨)の場合を除けば、大きなオーバーヘッドをもたらすものではありません。
関連
-
[解決済み] Sparkです。CoarseGrainedSchedulerが見つかりませんでした。
-
[解決済み] sbtのlibraryDependenciesで言うところの++=と+=の違いは何ですか?
-
[解決済み] Scalaのcase classとclassの違いは何ですか?
-
[解決済み】Scala 2.8のコレクション・ライブラリは「歴史上最も長い遺書」のケースか?[クローズド] Scala
-
[解決済み】Scalaにおける中括弧と括弧の正式な違い、また、どのような場合に使用すべきなのか?
-
[解決済み】Scala 2.8 breakOut
-
[解決済み】Scalaでケースクラスのインスタンスをクローンして、1つのフィールドだけを変更するにはどうすればよいですか?
-
[解決済み] Scalaで環境変数を読み込む方法
-
[解決済み】Scalaはどこでimplicitを探すのか?
-
[解決済み] IntelliJ Scala Pluginのcase classのインデントが不合理
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Scalaで定数メンバを定義するには?
-
[解決済み] NotUsedとDoneの理解
-
[解決済み] Scalaのapply関数とは何ですか?
-
[解決済み】タイプセーフのenum型をモデル化する方法は?
-
[解決済み】ScalaのHigher kinded typeとは何ですか?
-
[解決済み】タスクがシリアライズされない:オブジェクトではなくクラスに対してのみクロージャの外で関数を呼び出すとjava.io.NotSerializableExceptionが発生する
-
[解決済み】ScalaのfoldLeftとreduceLeftの違いについて
-
[解決済み】ScalaのJavaConvertersとJavaConversionsの違いは何ですか?
-
[解決済み] マクロから匿名クラスのメソッドを持つ構造型を取得する
-
[解決済み] Build.scala、%および%%の記号の意味