Scala - 是否可以编写具有可变参数的 HOF?

Scala - is it possible to write HOF that has varargs?

我可以有一个 return 是 func(varargs*) 的高阶函数吗,例如 (s: String*) => String

我正在尝试执行以下操作:

  def concatKeys(delimiter: String) = {
    def concat(k1: String, k2: String): String = if (k1.isEmpty) k2 else k1 + delimiter + k2

    (keys: String*) => keys.foldLeft("")(concat)
  }

但是当我按预期使用它时,代码没有编译:

      val key: String = concatKeys(delimiter)(keyAcc, kv._1)

如果我把它改成 Traversable:

  def concatKeys(delimiter: String) = {
    def concat(k1: String, k2: String): String = if (k1.isEmpty) k2 else k1 + delimiter + k2

    (keys: Traversable[String]) => keys.foldLeft("")(concat)
  }

自然编译:

      val key: String = concatKeys(delimiter)(Set(keyAcc, kv._1))

那么,return 一个带有可变参数的 HOF 是不可能的吗?如果不是,为什么不呢?

谢谢大家!

Varargs 不是有效类型,它们只是糖语法,仅适用于 methods,不适用于 functions.
请记住,在方法体内,可变参数实际上只是一个 Seq

所以不,你不能。