代码之家  ›  专栏  ›  技术社区  ›  zackg

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

  •  2
  • zackg  · 技术社区  · 7 年前

    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

    例如,我认为指示编译器忽略类的隐式参数 <:< =:=

    2 回复  |  直到 7 年前
        1
  •  8
  •   Oleg Pyzhcov    7 年前

    -Ywarn-unused -Ywarn-value-discard :

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

    ev.unused 在代码中明确“指定”该值不使用或仅用于副作用。你是 未使用 -Ywarn未使用


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

        2
  •  1
  •   Darren Bishop    3 年前

    @unused 注释可用(从何时开始,我不确定):

    import scala.annotation.unused
    
    def drinkCoffee(implicit @unused ev: IsDecaffeinated[S]): Hacker[State.Caffeinated]
    

    因此,不能使用上下文边界

    推荐文章