Suppress “discarded non-Unit value” warning

2020-02-11 17:50发布

问题:

I have added the scalac command line argument -Ywarn-value-discard to my build because this would have caught a subtle bug that I just found in my code. However, I now get some warnings for "discarded non-Unit value" that are about intentional discards, not bugs. How do I suppress those warnings?

回答1:

You suppress these warning by explictly returning unit (that is ()). By example turn this:

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

into:

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


回答2:

According to this answer, you can also use the syntax val _, i.e.

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

But there is some dispute over whether this or the answer by @Régis is the preferred style.



回答3:

Now you can suppress value-discard warning via type ascription to Unit in Scala 2.13.

This is an example:

def suppressValueDiscard(): Unit =
  "": Unit