2012-11-16 7 views
25

scalacコマンドライン引数-Ywarn-value-discardを自分のビルドに追加しました。これは自分のコードで見つけた微妙なバグを捕まえたからです。しかし、私は今、バグではなく、意図的な破棄に関する「廃棄された非単価」に関する警告を受け取ります。これらの警告をどのように抑制しますか?"ユニット外の値を破棄しました"という警告を表示しない

答えて

34

明示的にユニット(つまり())を返すことで、これらの警告を抑制します。すなわち、

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

'method2'で' method1'を呼び出すときに_non-Unitの値を破棄していませんか? – botchniaque

+1

最初のスニペットは**警告をトリガするケースを示します( '-Ywarn-value-discard'が有効になっている場合)ので、実際にはこの場合は非単位値(' method1'の戻り値) 'method2'で' method1'を呼び出すときに破棄されます。 2番目のスニペットは明示的に "unit"(つまり '()')を返し、警告を削除します。 –

8

this answerによると、あなたはまた、構文val _を使用することができます

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

をしかし、かどうか、この以上のいくつかの論争があります:

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

へ: 例では、これを回します@Régisによる回答が好ましいスタイルです。

関連する問題