Scala Language Guardie (se espressioni)


Esempio

Le espressioni case possono essere combinate con le espressioni if ​​per fornire una logica extra durante la corrispondenza dei pattern.

def checkSign(x: Int): String = {
    x match {
      case a if a < 0 => s"$a is a negative number"
      case b if b > 0 => s"$b is a positive number"
      case c => s"$c neither positive nor negative"
    }
}

È importante assicurarsi che le tue guardie non creino una corrispondenza non esaustiva (il compilatore spesso non lo prenderà):

def f(x: Option[Int]) = x match {
    case Some(i) if i % 2 == 0 => doSomething(i)
    case None    => doSomethingIfNone
}

Questo genera un MatchError su numeri dispari. È necessario tenere conto di tutti i casi o utilizzare una casella di ricerca con caratteri jolly:

def f(x: Option[Int]) = x match {
    case Some(i) if i % 2 == 0 => doSomething(i)
    case _ => doSomethingIfNoneOrOdd
}