有没有办法忽略不匹配的情况?

rye*_*guy 15 scala

如果我有一个match表达式,如何在没有明确表达的情况下自动忽略不匹配case _ =>?有没有办法创建一个可以做这样的事情的函数?

Rex*_*err 28

你需要一种通用的方法来处理"忽略".除其他类外,选项提供了这些(除其他外).所以你可以:

val i = 7
Some(i) collect {
  case 3 => "Yay!"
  case 5 => "Boo!"
}
Run Code Online (Sandbox Code Playgroud)

得到None(打字Option[String]).所以基本上,如果你改变你x matchSome(x) collect可以得到你想要的功能.当人们对处理选项感到满意时,最好这样做.


Dan*_*ral 11

写一个通用的匹配器:

object Match {
    def default: PartialFunction[Any, Unit] = { case _ => }
    def apply[T](x: T)(body: PartialFunction[T, Unit]) = (body orElse default)(x)
}
Run Code Online (Sandbox Code Playgroud)

例:

scala> 1 to 5 foreach (Match(_) {
     |   case 2 => println("two")
     |   case 3 => println("three")
     | }
     | )
two
three
Run Code Online (Sandbox Code Playgroud)

您可能会感兴趣太PartialFunction的同伴对象的方法condcondOpt.