我想定义一个函数f()如下(仅作为示例):

val f: (vararg strings: String) -> Unit = { for (str in it) println(str) }
这样我就可以使用f("a","b","c")调用它。对于f()的上述定义,我得到编译错误,指向vararg修饰符(Kotlin v。1.3.60):
Unsupported [modifier on parameter in function type]
如何定义接受vararg参数的lambda?

最佳答案

恐怕这是不可能的。下面通过vararg演示函数的类型。 vararg参数由Array表示:

fun withVarargs(vararg x: String) = Unit

val f: KFunction1<Array<out String>, Unit> = ::withVarargs

docs中也建议此行为:



因此,您必须在示例中使用Array<String>。您可以使用允许使用vararg并根据需要进行调用的普通函数,而不是将其编写为lambda函数:
fun f(vararg strings: String) = strings.forEach(::println)

f("a","b","c")

关于lambda - Kotlin Lambda中的vararg参数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48045884/

10-10 14:05