Как сопоставить шаблон с несколькими значениями в Scala? - PullRequest
80 голосов
/ 26 августа 2011

Допустим, я хочу обработать несколько возвращаемых значений из удаленного сервиса, используя один и тот же код. Я не знаю, как выразить это в 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

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

1 Ответ

141 голосов
/ 26 августа 2011

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

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

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

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