禁止"丢弃非单位值"警告

Rob*_*een 36 scala compiler-warnings

我已经将scalac命令行参数添加-Ywarn-value-discard到我的构建中,因为这会捕获我在代码中找到的一个微妙的错误.但是,我现在得到一些关于"丢弃的非单位价值"的警告,这些警告是关于有意丢弃的,而不是错误的.我该如何压制这些警告?

Rég*_*les 50

你通过明确地返回单位来抑制这些警告(即()).举例来说:

def method1() = {
   println("Hello")
   "Bye"
}
def method2() {
  method1() // Returns "Bye", which is implicitly discarded
}
Run Code Online (Sandbox Code Playgroud)

成:

def method1() = {
   println("Hello")
   "Bye"
}
def method2() {
  method1()
  () // Explicitly return unit
}
Run Code Online (Sandbox Code Playgroud)

  • 第一个片段说明了 **does** 触发警告的情况(当启用 `-Ywarn-value-discard` 时),所以在这种情况下确实是一个非单位值(`method1` 的返回值)是在`method2`中调用`method1`时被丢弃。第二个代码段显式返回“unit”(换句话说,`()`),从而消除了警告。 (2认同)

Tod*_*wen 12

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

def method2(): Unit = {
  val _ = method1()
}
Run Code Online (Sandbox Code Playgroud)

但对于@Régis的这个或答案是否是首选款式存在争议.


flo*_*cat 5

现在,你可以通过抑制类型归属价值丢弃警告,Unit斯卡拉2.13

这是一个例子:

def suppressValueDiscard(): Unit =
  "": Unit
Run Code Online (Sandbox Code Playgroud)