Как сопоставить несколько значений по шаблону в 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 =>
}
axel22
источник