Как написать If-Else l oop с несколькими условиями идиоматическим способом c Scala? - PullRequest
0 голосов
/ 03 апреля 2020

Я - Scala noob и пытаюсь написать следующий фрагмент кода для проверки Scala idiomati c.

Как использовать Options и case-match в такой сценарий? Или здесь невозможно избежать нулевой проверки?

var flag = True

// set flag to true when exactly 1 of (c1,c2) is present
if (c1 == null and c2 == null) or (c1 != null and c2 != null){
    flag = False
}

// other code continues that manipulates flag

Ответы [ 2 ]

4 голосов
/ 03 апреля 2020

Во-первых, нам нравится избегать null s, отсекая их как можно раньше.

val o1 = Option(/*code that retrieved/created c1*/)
val o2 = Option(/*code that retrieved/created c2*/)

Тогда код, который "манипулирует" изменяемыми переменными, является плохой идеей, но, как вы этого не сделали Мы не можем предложить лучшие решения для этой части.

val flag = o1.fold(o2.nonEmpty)(_ => o2.isEmpty) &&
              //other code continues that calculates flag value
3 голосов
/ 03 апреля 2020

Это именно то, что XOR делает

val flag = c1 == null ^ c2 == null

Как упоминалось @jwvh, было бы замечательно избегать также null s в Scala.

val o1 = Option(c1) // turns null into None
val o2 = Option(c2)

val flag = o1.isDefined ^ o2.isDefined

Примечание в обоих примерах вам не нужно использовать var.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...