[解決済み] Scalaの複数型パターンマッチ
2023-04-06 02:56:21
質問
複数タイプのパターンマッチを使用するにはどうしたらよいでしょうか。私は持っています。
abstract class MyAbstract
case class MyFirst extends MyAbstract
case class MySecond extends MyAbstract
case class MyThird extends MyAbstract // shouldn't be matched and shouldn't call doSomething()
val x: MyAbstract = MyFirst
x match {
case a: MyFirst => doSomething()
case b: MySecond => doSomething()
case _ => doSomethingElse()
}
というような書き方をしたいと思います。
x match {
case a @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
私はいくつかのチュートリアルで同様の構造を見たが、それは私のエラーを与える。
pattern type is incompatible with expected type;
[error] found : object MyFirst
[error] required: MyAbstract
では、on case節でいくつかの異なる型を定義する方法はあるのでしょうか?私はそれがコードをより美しくすると思います。5つもあると、同じコードを5回書くことになるので(doSomething()を呼び出す)。
事前にありがとうございました。
どのように解決するのですか?
ケースクラスに括弧がありません。 パラメータリストのないケースクラスは非推奨です。
これを試してみてください。
abstract class MyAbstract
case class MyFirst() extends MyAbstract
case class MySecond() extends MyAbstract
val x: MyAbstract = MyFirst()
x match {
case aOrB @ (MyFirst() | MySecond()) => doSomething(aOrB)
case _ => doSomethingElse()
}
ケースクラスのパラメタが多すぎて、長い
Foo(_,_,..)
パターンを書くのが好きなら、そうかもしれません。
x match {
case aOrB @ (_:MyFirst | _:MySecond) => doSomething(aOrB)
case _ => doSomethingElse()
}
あるいはただ
x match {
case _:MyFirst | _:MySecond => doSomething(x) // just use x instead of aOrB
case _ => doSomethingElse(x)
}
しかし、おそらくあなたはシングルトンケースオブジェクトが欲しかっただけではありませんか?
abstract class MyAbstract
case object MyFirst extends MyAbstract
case object MySecond extends MyAbstract
val x: MyAbstract = MyFirst
x match {
case aOrB @ (MyFirst | MySecond) => doSomething()
case _ => doSomethingElse()
}
関連
-
[解決済み] オブジェクトの種類を決定しますか?
-
[解決済み] 型チェック:typeof、GetType、is?
-
[解決済み] Pythonで型をチェックする標準的な方法は何ですか?
-
[解決済み】type()とisinstance()の違いは何ですか?)
-
[解決済み】pandasでカラムの種類を変更する
-
[解決済み] Scalaのforループは下降か減少か?
-
[解決済み] 機能的デザインパターン【終了しました
-
[解決済み] Scalaです。ScalaのコレクションにおけるTraversableとIterableの違いは何ですか?
-
[解決済み] ScalaTestでカスタム失敗メッセージを表示するには?
-
[解決済み] Scalaで使える数学・統計のライブラリはありますか?[クローズド]
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RDDの内容を印刷するには?
-
[解決済み] IntelliJ IDEAで依存関係が変更された後、build.sbtから強制的に再ロードするには?
-
[解決済み] Scalaのパターンマッチはなぜ変数で機能しないのですか?
-
[解決済み] Scalaにおけるval-mutableとvar-immutableの比較
-
[解決済み] Scalaのcaseクラスを宣言することのデメリットは何ですか?
-
[解決済み] Scalaで、リストから重複を取り除くにはどうしたらいいですか?
-
[解決済み] Mapにkeyやvalueが存在するかどうかを確認するには?
-
[解決済み] 上位互換型はどんなときに役立つのか?
-
[解決済み] Scalaのコレクションにenrich-my-libraryパターンを適用するにはどうしたらいいですか?
-
[解決済み] scalaのApp traitとmainメソッドの違いについて