2012-11-16 15 views
25

Ho aggiunto l'argomento della riga di comando scalac -Ywarn-value-discard alla mia build perché questo avrebbe rilevato un bug sottile che ho appena trovato nel mio codice. Tuttavia, ora ricevo alcuni avvertimenti per il "valore non unitario scartato" che riguarda gli scarti intenzionali, non i bug. Come posso sopprimere questi avvertimenti?Avviso "scartato valore non unitario" avviso

risposta

34

Si sopprime questo avviso restituendo esplicitamente l'unità (ovvero ()). Con esempio trasformare questo:

def method1() = { 
    println("Hello") 
    "Bye" 
} 
def method2() { 
    method1() // Returns "Bye", whihc is implicitly discarded 
} 

in:

def method1() = { 
    println("Hello") 
    "Bye" 
} 
def method2() { 
    method1() 
() // Explicitly return unit 
} 
+0

non scarti _non-Unit value_ quando si chiama 'method1' in' method2'? – botchniaque

+1

Il primo frammento illustra un caso che ** fa ** attiva l'avviso (quando '-Ywarn-value-scarta' è abilitato), quindi sì sì in questo caso un valore non unitario (il valore di ritorno di' method1') viene scartato quando si chiama 'method1' in' method2'. Il secondo snippet restituisce esplicitamente "unit" (in altre parole '()'), rimuovendo quindi l'avviso. –

8

Secondo this answer, è anche possibile utilizzare la sintassi val _, cioè

def method2(): Unit = { 
    val _ = method1() 
} 

Ma v'è una certa disputa se questo o la risposta di @ Régis è lo stile preferito.