Могу ли я преобразовать это, если еще операторы в сопоставление с образцом без вложенного сопоставления с образцом в scala? - PullRequest
1 голос
/ 15 марта 2020

Скажем, у меня есть эти условия, в которых все значения зависят друг от друга -

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 в этой ситуации вместо использования сопоставления с образцом.

Ответы [ 2 ]

4 голосов
/ 15 марта 2020

Ну, вы можете сделать это:

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.
Здесь вы не сопоставляете с любым шаблоном .

2 голосов
/ 15 марта 2020

Вы также можете игнорировать аргумент соответствия:

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 операторы, но все же это следующий способ сделать это.

...