我将 -Ywarn-value-discard
命令行参数添加到我的构建中,因为这将捕捉到我刚刚发现的代码中的一个微妙错误。然而,现在我会收到一些有关意图放弃而不是错误的警告,如“放弃非Unit值”的警告。我该如何禁止这些警告呢?
我将 -Ywarn-value-discard
命令行参数添加到我的构建中,因为这将捕捉到我刚刚发现的代码中的一个微妙错误。然而,现在我会收到一些有关意图放弃而不是错误的警告,如“放弃非Unit值”的警告。我该如何禁止这些警告呢?
你可以通过显式返回 unit (即 ()
) 来抑制这些警告。
例如,将其转换为:
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
}
根据这个回答,你也可以使用语法val _
。
def method2(): Unit = {
val _ = method1()
}
但是关于这个问题,是否采用 @Régis 的回答为首选风格存在一些争议。
method1() match { case _ => }
也可以接受吗? - Netsuval _ = rdd1.unpersist()
和下面的一行 val _ = rdd2.unpersist()
,编译器会报告值 _
已经被定义。 - Wonay-Ywarn-value-discard
不会仅仅因为忽略非 Unit 值而发出警告。在语言规范的 6.26.1 节 中定义的“值丢弃”是指一个值出现在期望为 Unit 的位置,例如作为方法的返回值。 - Todd Owen
method2
中的method1
时,您是否会丢弃非单元值? - botchniaque-Ywarn-value-discard
时会触发警告,因此在调用method2
中的method1
时,确实丢弃了非单元值(即method1
的返回值)。第二个代码片段明确返回“unit”(换句话说是()
),从而消除了警告。 - Régis Jean-Gilles