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
所以不,你不能。
我可以有一个 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
所以不,你不能。