【问题标题】:Scala - is it possible to write HOF that has varargs?Scala - 是否可以编写具有可变参数的 HOF?
【发布时间】:2022-01-23 20:33:41
【问题描述】:

我能否有一个返回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))

那么,不可能返回带有可变参数的 HOF 吗?如果没有,为什么不呢?

谢谢大家!

【问题讨论】:

  • 已经有一个.mkString 用于执行此操作的集合。
  • 很高兴知道。 :D 谢谢。

标签: scala apache-spark functional-programming variadic-functions higher-order-functions


【解决方案1】:

Varargs 不是有效类型,它们只是仅在方法中可用的糖语法,在函数中不可用。
请记住,在方法体内,可变参数实际上只是一个Seq

所以不,你不能。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多