如何解决未使用警告的价值丢弃

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

但是,这样的函数有两个问题。

  1. 它有几个不必要的额外分配;即 Seq 用于 varargsTuple.
  2. 它不是 stdlib 的一部分,将它添加到所有项目中有点乏味。

是否有任何其他开箱即用的好方法?

2.13

因为 Scala 2.13 有两种方法可以禁用这两个警告。

  1. 将值赋给一个不存在的变量:
def testFix1()(implicit i: Int): Unit = {
  val _ = i
  val _ = data
}
  1. 将表达式键入脚本为单位:
def testFix2()(implicit i: Int): Unit = {
  i : Unit
  data : Unit
}

我们没有正式的参考或证明,但认为第二个选项应该是透明;从某种意义上说,它不应该对运行时产生任何影响,例如额外的分配或不需要的代码生成。


可以看到代码运行 here.


3.0

据我们所知,相同的技巧应该适用于 Scala 3 (又名 Dotty.

2.12

???