Scala - 是不是可以编写具有可变参数的 HOF?
Posted
技术标签:
【中文标题】Scala - 是不是可以编写具有可变参数的 HOF?【英文标题】: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 谢谢。
【参考方案1】:
Varargs 不是有效类型,它们只是仅在方法中可用的糖语法,在函数中不可用。
请记住,在方法体内,可变参数实际上只是一个Seq
所以不,你不能。
【讨论】:
以上是关于Scala - 是不是可以编写具有可变参数的 HOF?的主要内容,如果未能解决你的问题,请参考以下文章