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

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

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

最佳答案

我经常发现自己添加这个是因为 -Ywarn-unused-Ywarn-value-discard:

package myproject

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

允许您在代码中执行 ev.unused 以明确“指定”该值不会被使用或仅用于副作用。您没有在定义中使用类字段,但这对 -Ywarn-unused 没问题。


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

关于scala - 使用 -Ywarn-unused 时从 Scala 中的分析中排除类型证据参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46128561/

相关文章:

scala - 使用 Spark Structured Streaming 时限制 kafka 批量大小

Git 工作流程 - 更改分支和缓慢的重新编译

c++ - “Warning: Comma within array index expression”,但逗号分隔函数参数

mingw - -Wundef 和 -Werror=undef 在 MinGw 4.4.1 中不能一起工作

scala - scala 类定义中这个额外的 private[class]() 是什么意思?

scala - 从同伴导入的类不能用作构造函数参数默认值

compiler-errors - 是否有 -Wall -Werror 的 rustc 等价物?

scala - 来自周围范围的隐式参数解析

scala - 从返回类型推断泛型隐式参数的类型

java - 将 scala 与 java 集成