编译包含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
在运行时实际上并不是必需的,但该参数在编译时很有用。有没有办法指示编译器忽略这种情况,同时仍然在其他上下文中引发未使用函数参数的警告?
例如,我认为指示编译器忽略类<:<
或=:=
的隐式参数将解决此问题,但我不确定如何实现。
答案 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插件来抑制这几种方法的警告。