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实际上不是在运行时必需的,但在编译时该参数很有用。有什么方法可以指示编译器忽略这种情况,同时在其他情况下仍对未使用的函数参数提出警告?
例如,我认为指示编译器忽略类的隐式参数<:<或=:=将解决此问题,但是我不确定如何实现。
我经常发现自己是由于-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。
您的另一个选择是使用消音器插件来抑制这几种方法的警告。