如何模式匹配Scala中的多个值?

Fra*_*eil 82 scala pattern-matching

假设我想使用相同的代码处理来自远程服务的多个返回值.我不知道如何在Scala中表达这一点:

code match {
  case "1" => // Whatever
  case "2" => // Same whatever
  case "3" => // Ah, something different
}
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用Extract Method并调用它,但是在调用中仍然有重复.如果我使用Ruby,我会这样写:

case code
when "1", "2"
  # Whatever
when "3"
  # Ah, something different
end
Run Code Online (Sandbox Code Playgroud)

请注意,我简化了示例,因此我不想在正则表达式上进行模式匹配等.匹配值实际上是复数值.

axe*_*l22 144

你可以做:

code match {
  case "1" | "2" => // whatever
  case "3" =>
}
Run Code Online (Sandbox Code Playgroud)

请注意,您无法将模式的某些部分绑定到名称 - 您目前无法执行此操作:

code match {
  case Left(x) | Right(x) =>
  case null =>
}
Run Code Online (Sandbox Code Playgroud)