48

我已将 scalac 命令行参数添加-Ywarn-value-discard到我的构建中,因为这会发现我刚刚在我的代码中发现的一个细微错误。但是,我现在收到一些关于“丢弃的非单位值”的警告,这些警告是关于故意丢弃,而不是错误。如何抑制这些警告?

4

3 回答 3

67

您可以通过显式返回单位(即())来抑制这些警告。例如转这个:

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
}
于 2012-11-16T11:09:05.803 回答
21

根据这个答案,您也可以使用语法val _,即

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

但是对于这个或@Régis 的答案是否是首选风格存在一些争议。

于 2015-06-10T06:01:55.733 回答
5

现在,您可以通过Scala 2.13Unit中的类型归属来抑制值丢弃警告。

这是一个例子:

def suppressValueDiscard(): Unit =
  "": Unit
于 2019-08-09T14:56:54.360 回答