使用-Ywarn-unused时,从Scala中的分析中排除类型证据参数

zac*_*ckg 2 scala compiler-warnings implicits phantom-types unused-variables

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

例如,在此处编译文件: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实际上不是在运行时必需的,但在编译时该参数很有用。有什么方法可以指示编译器忽略这种情况,同时在其他情况下仍对未使用的函数参数提出警告?

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

Ole*_*cov 6

我经常发现自己是由于-Ywarn-unused或来添加此内容的-Ywarn-value-discard

package myproject

package object syntax {
  implicit class IdOps[A](a: A) {
    def unused: Unit = ()
  }
}
Run Code Online (Sandbox Code Playgroud)

使您可以ev.unused在代码中明确“指定”该值将不被使用或仅用于副作用。您没有在定义中使用 class字段,但是对于没关系-Ywarn-unused


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