【问题标题】:How to suppress warnings of unused parameter for overridden method in scala?如何抑制scala中覆盖方法的未使用参数的警告?
【发布时间】:2019-12-21 23:39:18
【问题描述】:

根据this,可以禁止未使用参数的任何警告。

但是,我认为抑制所有情况实际上可以隐藏错误,所以我想要一种更精细的方法来抑制这些。

有一个明确的用例,这个警告在大多数情况下是没有意义的,我将通过一个例子来解释它。

例如以下假设的代理代码:

trait HeadersGenerator {
  def generateHeaders(request: Request): Seq[(String, String)]
}

class HeaderMutator extends HeadersGenerator {
  override def generateHeaders(request: Request): Seq[(String, String)] = {
    val oldValue = request.getHeader("SomeHeader")    

    Seq("SomeHeader" -> s"$oldValue - new")
  }
}

class ConstantHeaderGenerator extends HeadersGenerator {
  // here the 'request' parameter is not in use, and needed to be suppressed - 
  // it is not interesting that we do not use it here, since we 
  // don't have anything to do with that because it is inherited
  override def generateHeaders(request: Request): Seq[(String, String)] = {
    Seq("GeneratedHeader" -> "something")
  }

  // here the 'unused' parameter is interesting, and I would like to see a warning
  private def shouldWarn(unused: String) {
    // the parameter is not un use here
  }
}

// somewhere in code
val headers = Seq(
  new HeadersMutator,
  new ConstantHeaderGenerator
).flatMap(_.generateHeaders(request))

【问题讨论】:

标签: scala compiler-warnings


【解决方案1】:

我认为如果您使用_ 而不是参数名称,在您的案例请求中,警告将会消失。如果不使用参数,则不必命名参数。

【讨论】:

  • 不能这样工作,至少在 scala 2 中
【解决方案2】:

人们总是可以以一种不做任何事情的方式使用自己的参数。例如:

object CombinatoryLogic {
    def unused[T](arg: T): Unit = arg match { case _ => () }

    // Church encoding of true
    def k[A, B](consequent: A, alternative: B): A = {
        unused(alternative)
        consequent
    }
}

在我的规模上,它是一个适度的组合。在好处方面,它总是可用的。

【讨论】:

    【解决方案3】:

    使用this annotation 编译器:

      private def shouldWarn(@nowarn unused: String) {
        // the parameter is not in use here
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-12-14
      • 1970-01-01
      • 2014-12-23
      • 1970-01-01
      • 2019-12-22
      • 2013-02-23
      • 2014-04-24
      相关资源
      最近更新 更多