2016-03-29 6 views
5

Scalastyle(2016.1デフォルトIntelliJの)簡略化することができ、このブール式は、私がもしに変更することで、この取り除くことができ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))) 

ORでの変更する& & to &

しかし、これがどのように単純化されているのかは分かりませんが、 n何が起こっているの?

アップデートは ヴァルスはコンパイル時に知られている、またはそれらをローカルに定義されている場合に関連すると表示されません。次のコードも入手が式が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は真を含む)&&(fは偽を含む)' – hasumedic

答えて

2

これは、メソッド呼び出しの使用法と一貫していることを示唆しているようです。通常のメソッド呼び出しの形で

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

またはすべて:どちらの中置形で、すべて私はあなたがそれらの値を宣言しているだけなのでそこにそれらを使用していると思い

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

値がt.contains(true).&&(f.contains(false))の場合、常にtrueが返されます。したがって、trueと書いて簡略化することができます。つまり、ifの条件なしでprintを実行するだけです。

+0

申し訳ありませんが、実際のコードでは、コンパイル時に既知の値は使用されません。私は明確にする別の例を加えました – klogd