2016-03-29 21 views
5

Scalastyle (IntelliJ 2.016,1 default) dice che questa espressione booleana può essere semplificataespressione Scalastyle booleana può essere semplificata

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

posso liberarmi di questo modificando il caso di:

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

O per cambiare & & a &

Ma non vedendo davvero come questo lo sta semplificando, qualcuno potrebbe spiegare n cosa sta succedendo?

Aggiornamento non sembra essere correlato a se i vals sono noti al momento della compilazione, o che vengano definiti a livello locale. Il seguente codice è anche ottenere l'avvertimento che l'espressione può essere semplificazioni rese:

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

io proprio non capisco come dovrei fare che qualsiasi semplice, c'è qualche strano Opzione [booleano] confrontando Sono perdersi?

+0

Penso che dato che si sta dichiarando quei valori e solo con loro c'è, ti aspetta a in-line quei valori nella tua istruzione 'if' – hasumedic

+0

Non sembra dove sono definite le variabili o se il valore è noto al momento della compilazione. Aggiornato con un altro esempio – klogd

+1

Cosa succede quando si utilizza la notazione infix? per esempio. '(t contiene true) && (f contiene false)' – hasumedic

risposta

2

Sembra suggerirti di essere coerente con l'utilizzo della chiamata al metodo. O tutto in forma infissa:

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

O tutto in regolare forma chiamata di metodo:

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

Con i valori, t.contains(true).&&(f.contains(false)) restituisce sempre true. Così puoi semplificarlo scrivendo semplicemente true, cioè eseguendo semplicemente lo print senza una condizione if.

+0

Siamo spiacenti, il codice effettivo non utilizza i valori noti al momento della compilazione. Ho aggiunto un altro esempio per chiarire – klogd