警衛(如果表達)
Case 語句可以與 if 表示式結合使用,以便在模式匹配時提供額外的邏輯。
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"
}
}
確保你的警衛不會建立非詳盡的匹配(編譯器通常不會捕獲此內容)非常重要:
def f(x: Option[Int]) = x match {
case Some(i) if i % 2 == 0 => doSomething(i)
case None => doSomethingIfNone
}
這會在奇數上丟擲一個 MatchError
。你必須考慮所有情況,或使用萬用字元匹配案例:
def f(x: Option[Int]) = x match {
case Some(i) if i % 2 == 0 => doSomething(i)
case _ => doSomethingIfNoneOrOdd
}