scala中多个参数的匹配守卫
scala中强大且简洁的模式匹配常用于各种逻辑判断场景。
我们常用的模式匹配场景一般如下:
val x = 1
val str = x match {
case 0 => "我是0。"
case 1 => "我是1。"
case _ => "我是谁?"
}
此时 str 的值只决定于对 x 的逻辑判断。
但很多业务场景中,某些量的赋值决定于多个值,此时我们需要借用匹配守卫:
val x = 1
val y = 2
val str = x match {
// y match ...
case 1 if y == 1 => "我是0。"
case 1 if y == 2 => "我是1。"
case _ => "我是谁?"
}
此处无论是写成 x match … 或者 y match … 代码都能行。
但这种写法并不雅观,逻辑判断中明明需要两个或者更多的值,为何只需要填入一个?
其实当我们使用 case _ if … 时,用什么 match 已经无所谓,因为 if 后面的参数会默认从全局变量中寻找。
那么此时我们可以将代码改写成:
val x = 1
val y = 2
val str = AnyRef match {
case _ if x == 1 && y == 1 => "我是0。"
case _ if x == 1 && y == 2