如何在scala中禁止覆盖方法的未使用参数的警告?

时间:2019-08-15 14:29:59

标签: scala compiler-warnings

根据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))

2 个答案:

答案 0 :(得分:1)

我认为,如果您使用_而不是参数名称,那么在您的情况下,警告将消失。如果不使用参数,则不必命名。

答案 1 :(得分:0)

一个人总是可以以什么都不做的方式使用自己的参数。例如:

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
    }
}

从我的角度来看,这是中等程度的不适。在收益方面,它始终可用。