web-dev-qa-db-ja.com

「破棄された非ユニット値」警告を抑制

Scalacコマンドライン引数-Ywarn-value-discardをビルドに追加しました。これは、コードで見つけた微妙なバグをキャッチするためです。ただし、「破棄された非ユニット値」に対して、バグではなく意図的な破棄に関する警告が表示されるようになりました。これらの警告を抑制するにはどうすればよいですか?

37
Robin Green

ユニットを明示的に返すことにより、これらの警告を抑制します(つまり、())。例としてこれを回します:

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

に:

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

この答え によれば、val _という構文を使用することもできます。

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

しかし、これと@Régisによる回答のどちらが望ましいスタイルであるかについては、いくつかの論争があります。

15
Todd Owen

Scala 2.1Unitへの型のサブスクリプションを介して、値破棄の警告を抑制できるようになりました。

これは例です:

def suppressValueDiscard(): Unit =
  "": Unit
2
floating cat