Скалярное логическое выражение может быть упрощено
Scalastyle (intellij 2016.1 по умолчанию) говорит, что это логическое выражение может быть упрощено
val t = Option(true)
val f = Option(false)
if(t.contains(true) && f.contains(false)) {
println("booop")
}
Я могу избавиться от этого, изменив if на:
if(t.contains(true).&&(f.contains(false)))
Или изменив && на &
Но не понимая, как это упрощает, кто-нибудь может объяснить, что происходит?
Обновление Это не связано с тем, известны ли значения во время компиляции или они определены локально. Следующий код также получает предупреждение о том, что выражение может быть упрощено:
object TestFoo {
def bar(t: Option[Boolean]) = {
val f = Option(scala.util.Random.nextBoolean)
if (t.contains(true) && f.contains(false)) println("booop")
}
def main(args: Array[String]) = bar(t = Option(scala.util.Random.nextBoolean))
}
Я просто не понимаю, как я должен сделать это проще, есть какой-то странный Option[Boolean], по которому я упускаю?
2 ответа
Похоже, что вы согласны с использованием вызова метода. Либо все в инфиксной форме:
(t contains true) && (f contains false)
Или все в обычной форме вызова метода:
t.contains(true).&&(f.contains(false))
С вашими ценностями, t.contains(true).&&(f.contains(false))
всегда возвращается true
, Таким образом, вы можете упростить это, просто написав true
т.е. просто выполняя print
без if
состояние.