gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 19:50:11 24 4
gpt4 key购买 nike

在 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com