1. ホーム
  2. scala

[解決済み] Scalaで複数の値をパターンマッチさせるには?

2023-05-09 09:24:14

質問

リモートサービスからの複数の戻り値を同じコードで処理したいとします。これをScalaでどう表現したらいいのかわかりません。

code match {
  case "1" => // Whatever
  case "2" => // Same whatever
  case "3" => // Ah, something different
}

Extract Methodを使って、それを呼び出せばいいのは分かっているのですが、やはり呼び出しの繰り返しがあります。Rubyならこんな風に書きます。

case code
when "1", "2"
  # Whatever
when "3"
  # Ah, something different
end

この例は単純化したもので、正規表現などでのパターンマッチはしないことに注意してください。マッチの値は実際には複雑な値です。

どのように解決するのか?

できます。

code match {
  case "1" | "2" => // whatever
  case "3" =>
}

パターンの一部を名前にバインドすることはできないことに注意してください - 現在、これはできません。

code match {
  case Left(x) | Right(x) =>
  case null =>
}