我可以将此 if else 语句转换为模式匹配而无需在 Scala 中进行嵌套模式匹配吗?
Can I convert this if else statements into pattern matching without nested pattern matching in scala?
假设我有这个条件,所有值都相互依赖 -
val a = 9
val b = 89
val c = 0
val result =
if (a == 0) 0
else if (b == 4) 0
else if (c < 90) 0
else a + b + c
如何在不嵌套的情况下使用模式匹配对其进行编码,或者以这种方式进行编码是否合适。在这种情况下使用 if else 条件而不是使用模式匹配是否有一些缺点。
你可以这样做:
val a = 9
val b = 89
val c = 0
val result =
(a, b, c) match {
case (0, _, _) => 0
case (_, 0, _) => 0
case (_, _, c) if (c < 90) => 0
case (a, b, c) => a + b + c
}
但老实说,我只会使用 if / else
。
在这里你不是匹配任何模式。
您也可以忽略匹配参数:
val a = 9
val b = 89
val c = 0
val result = a match {
case _ if a == 0 => 0
case _ if b == 0 => 0
case _ if c < 90 => 0
case _ => a + b + c
}
这并不比 if/else
语句好,但它仍然是下一个实现方式。
假设我有这个条件,所有值都相互依赖 -
val a = 9
val b = 89
val c = 0
val result =
if (a == 0) 0
else if (b == 4) 0
else if (c < 90) 0
else a + b + c
如何在不嵌套的情况下使用模式匹配对其进行编码,或者以这种方式进行编码是否合适。在这种情况下使用 if else 条件而不是使用模式匹配是否有一些缺点。
你可以这样做:
val a = 9
val b = 89
val c = 0
val result =
(a, b, c) match {
case (0, _, _) => 0
case (_, 0, _) => 0
case (_, _, c) if (c < 90) => 0
case (a, b, c) => a + b + c
}
但老实说,我只会使用 if / else
。
在这里你不是匹配任何模式。
您也可以忽略匹配参数:
val a = 9
val b = 89
val c = 0
val result = a match {
case _ if a == 0 => 0
case _ if b == 0 => 0
case _ if c < 90 => 0
case _ => a + b + c
}
这并不比 if/else
语句好,但它仍然是下一个实现方式。