如何解决未使用警告的价值丢弃
How to workaround value-discard or unused warnnings
虽然建议通过使用 sbt-tpolecat.
显式或隐式打开编译器标志,如 -Wvalue-discard
或 -Wunused:implicits
有时您需要解决这些问题,但要以明确的方式进行;因为我们通常认为这些东西是错误,所以这就是首先使用编译器标志的原因。
对于这些情况,一个比较常见的工作方法是以下 void
函数 (由 Rob Norris 提供).
@inline final def void(args: Any*): Unit = (args, ())._2
但是,这样的函数有两个问题。
- 它有几个不必要的额外分配;即 Seq 用于 varargs 和 Tuple.
- 它不是 stdlib 的一部分,将它添加到所有项目中有点乏味。
是否有任何其他开箱即用的好方法?
2.13
因为 Scala 2.13
有两种方法可以禁用这两个警告。
- 将值赋给一个不存在的变量:
def testFix1()(implicit i: Int): Unit = {
val _ = i
val _ = data
}
- 将表达式键入脚本为单位:
def testFix2()(implicit i: Int): Unit = {
i : Unit
data : Unit
}
我们没有正式的参考或证明,但认为第二个选项应该是透明;从某种意义上说,它不应该对运行时产生任何影响,例如额外的分配或不需要的代码生成。
可以看到代码运行 here.
3.0
据我们所知,相同的技巧应该适用于 Scala 3 (又名 Dotty).
2.12
???
虽然建议通过使用 sbt-tpolecat.
显式或隐式打开编译器标志,如-Wvalue-discard
或 -Wunused:implicits
有时您需要解决这些问题,但要以明确的方式进行;因为我们通常认为这些东西是错误,所以这就是首先使用编译器标志的原因。
对于这些情况,一个比较常见的工作方法是以下 void
函数 (由 Rob Norris 提供).
@inline final def void(args: Any*): Unit = (args, ())._2
但是,这样的函数有两个问题。
- 它有几个不必要的额外分配;即 Seq 用于 varargs 和 Tuple.
- 它不是 stdlib 的一部分,将它添加到所有项目中有点乏味。
是否有任何其他开箱即用的好方法?
2.13
因为 Scala 2.13
有两种方法可以禁用这两个警告。
- 将值赋给一个不存在的变量:
def testFix1()(implicit i: Int): Unit = {
val _ = i
val _ = data
}
- 将表达式键入脚本为单位:
def testFix2()(implicit i: Int): Unit = {
i : Unit
data : Unit
}
我们没有正式的参考或证明,但认为第二个选项应该是透明;从某种意义上说,它不应该对运行时产生任何影响,例如额外的分配或不需要的代码生成。
可以看到代码运行 here.
3.0
据我们所知,相同的技巧应该适用于 Scala 3 (又名 Dotty).
2.12
???