Как сопоставить несколько значений по шаблону в Scala?


85

Допустим, я хочу обрабатывать несколько возвращаемых значений из удаленной службы, используя один и тот же код. Я не знаю, как выразить это в Scala:

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

Я знаю, что могу использовать метод извлечения и вызывать его, но в вызове все еще есть повторение. Если бы я использовал Ruby, я бы написал это так:

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

Обратите внимание, что я упростил пример, поэтому я не хочу сопоставлять шаблон с регулярными выражениями и т. Д. Значения соответствия на самом деле являются комплексными.


возможный дубликат классов Match multiple
case

Ответы:


150

Ты можешь сделать:

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

Обратите внимание, что вы не можете привязать части шаблона к именам - вы не можете этого сделать в настоящее время:

code match {
  case Left(x) | Right(x) =>
  case null =>
}
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.