是否可以将if语句转换为模式匹配,而在scala中没有嵌套模式匹配?

问题描述 投票:1回答:2

说我有这个条件,所有值都相互依赖-

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条件而不是使用模式匹配是否有一些缺点。

scala if-statement switch-statement pattern-matching
2个回答
4
投票

好,您可以这样做:

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。在这里,您与任何pattern都不是matching


0
投票

您也可以忽略匹配参数:

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语句更好,但仍然是实现此目的的下一种方法。

© www.soinside.com 2019 - 2024. All rights reserved.