2016-03-29 118 views
5

Scalastyle(的IntelliJ 2016.1默認值)表示,這布爾表達式可以簡化Scalastyle布爾表達式可以簡化

val t = Option(true) 
val f = Option(false) 
if(t.contains(true) && f.contains(false)) { 
    println("booop") 
} 

我可以通過改變擺脫這個如果到:

if(t.contains(true).&&(f.contains(false))) 

或者通過改變& &改爲&

但是不是真的看到這是如何簡化它,任何人都可以解釋ñ發生了什麼事?

更新 它似乎沒有關係,如果VAL是編譯時已知的,或者它們是本地定義的。下面的代碼也得是警告,該表達式可以simplfied:

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)) 
} 

我只是不明白,我應該怎樣做,任何簡單,有一些奇怪的選項[布爾]比較我錯過了?

+0

我覺得,既然你聲明的值,並且僅使用它們那裏,它希望你在網上這些值在你的'if'語句中 – hasumedic

+0

看起來不像變量被定義的地方,或者在編譯時知道該值是重要的。用另一個示例更新 – klogd

+1

當您使用中綴表示法時會發生什麼?例如'(t包含true)&&(f包含false)' – hasumedic

回答

2

它似乎暗示你與方法調用的使用一致。無論是一切都在綴形式:

(t contains true) && (f contains false) 

或者一切都在規則的方法調用形式:

t.contains(true).&&(f.contains(false)) 
1

隨着您的值,t.contains(true).&&(f.contains(false))總是返回true。所以你可以通過簡單地寫true來簡化它,即只需執行print而沒有if條件。

+0

對不起,實際的代碼不使用編譯時已知的值。我已經添加了另一個例子來澄清 – klogd