使用-Ywarn-unused

时间:2017-09-09 08:10:36

标签: scala compiler-warnings implicits unused-variables phantom-types

编译包含Scala中的类型证据参数的程序(例如T <:< U)可能会在-Ywarn-unused传递给编译器时发出警告。特别是在使用类型证据参数来验证使用幻像类型编码的约束的情况下,可能会发生此警告。

举个例子,在这里编译文件: https://github.com/hseeberger/demo-phantom-types/blob/master/src/main/scala/de/heikoseeberger/demophantomtypes/Hacker.scala返回以下内容:

# scalac -Ywarn-unused Hacker.scala Hacker.scala:42: warning: parameter value ev in method hackOn is never used def hackOn(implicit ev: IsCaffeinated[S]): Hacker[State.Decaffeinated] = { ^ Hacker.scala:47: warning: parameter value ev in method drinkCoffee is never used def drinkCoffee(implicit ev: IsDecaffeinated[S]): Hacker[State.Caffeinated] = { ^ two warnings found

我很清楚,参数ev在运行时实际上并不是必需的,但该参数在编译时很有用。有没有办法指示编译器忽略这种情况,同时仍然在其他上下文中引发未使用函数参数的警告?

例如,我认为指示编译器忽略类<:<=:=的隐式参数将解决此问题,但我不确定如何实现。

1 个答案:

答案 0 :(得分:5)

由于-Ywarn-unused-Ywarn-value-discard

,我经常发现自己添加了这个内容
package myproject

package object syntax {
  implicit class IdOps[A](a: A) {
    def unused: Unit = ()
  }
}

让您在代码中ev.unused明确指出&#34;指定&#34;该值不会被使用或仅用于副作用。您在定义中未使用类字段,但-Ywarn-unused可以使用。

您的另一个选择是使用silencer插件来抑制这几种方法的警告。