Лучший способ протестировать значение Опции?

(((a+p) < = b) & & (== 0 || a> 1) & & (b> = p)) & & ((b - (+ p) == 0) || (b - (+ p)> 1))

1) (== 0 || a> 1) (a! = 1)

2) (b> = p) (b - p> = 0)

(+ p < = b) (b - p> = a), который более силен, чем (b - p> = 0).

Первое условие уменьшило до [1 112] (a! = 1) & & (b - p> = a).

3) (b - (+ p) == 0) (b - p == 0), (b - p == a).

(b - (+ p)> 1) (b - p> 1) (b - p> 1 + a).

, Так как мы имели (b - p> = a) и мы используем & & операция, мы можем сказать что (b - p> = покрытия a) (b - p == & & b - p> 1 + a).

Следовательно, целое условие будет уменьшено до

(a! = 1 & & (b - p> = a))

существует tempation для сокращения его далее до (b> = p), но это сокращение не покроет запрет на b = p + 1, поэтому (a! = 1 & & (b - p> = a)), условие.

29
задан oxbow_lakes 23 October 2009 в 07:31
поделиться

5 ответов

Как насчет

if (opt == Some("lakes"))

Это ясно выражает намерение и прямо.

41
ответ дан 28 November 2019 в 00:58
поделиться

Walter Chang FTW, но вот еще одна неудобная альтернатива:

Some(2) exists (_ == 2)
14
ответ дан 28 November 2019 в 00:58
поделиться

Вы также можете использовать для понимания:

for {val v <- opt if v == "lakes"}
  // do smth with v
1
ответ дан 28 November 2019 в 00:58
поделиться

Я думаю, что также можно использовать сопоставление с образцом. Таким образом вы напрямую извлечете интересующее значение:

val opt = Some("oxbow")
opt match {
  case Some(value) => println(value) //Doing something
}
-1
ответ дан 28 November 2019 в 00:58
поделиться
val opt = Some("oxbow")
opt match {
  case Some("lakes") => //Doing something
  case _ => //If it doesn't match
}
3
ответ дан 28 November 2019 в 00:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: