2016-03-29 15 views
5

Scalastyle (intellij 2.016,1 Defaults) sagt dieses Boolesche AusdruckScalastyle Booleschen Ausdruck vereinfacht werden kann

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

ich davon bekommen kann, indem befreien das, wenn auf:

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

Oder durch Ändern & & zu

Aber nicht wirklich sehen, wie dies vereinfacht es ist, könnte jemand erklären Was ist los?

Aktualisieren Es scheint nicht verwandt zu sein, wenn die Vals zum Zeitpunkt der Kompilierung bekannt sind, oder sie lokal definiert sind. Der folgende Code auch erhalten ist die Warnung, dass der Ausdruck simplfied werden kann:

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

ich einfach nicht, wie ich angeblich zu machen, dass jeder einfacher, gibt es einige seltsame Option [Boolean] Vergleich Ich bin verpassen?

+0

Ich denke, da Sie diese Werte sind zu erklären und mit ihnen nur dort, es erwartet Sie in-line Diese Werte in Ihrer 'if'-Anweisung – hasumedic

+0

Seht nicht so aus, wo die Variablen definiert sind oder ob der Wert zur Kompilierzeit bekannt ist. Mit einem anderen Beispiel aktualisiert – klogd

+1

Was passiert, wenn Sie die Infix-Notation verwenden? z.B. '(t enthält wahr) && (f enthält false)' – hasumedic

Antwort

2

Es scheint zu suggerieren, dass Sie mit der Verwendung des Methodenaufrufs konsistent sind. Entweder alles in Infix Form:

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

Oder alles in regelmäßigen Methodenaufruf Form:

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

Mit Ihren Werten gibt t.contains(true).&&(f.contains(false)) immer true zurück. Sie könnten es also vereinfachen, indem Sie einfach true schreiben, d. H. Indem Sie einfach print ohne einen if-Zustand ausführen.

+0

Entschuldigung, der eigentliche Code verwendet keine zur Kompilierzeit bekannten Werte. Ich habe ein weiteres Beispiel zur Klärung hinzugefügt – klogd

Verwandte Themen