Kotlin Lambda中的vararg参数

大卫·索罗科|

我想定义一个函数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

s1m0nw1

恐怕这是不可能的。下面用演示函数的类型varargvararg参数由一个表示Array

fun withVarargs(vararg x: String) = Unit

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

docs中也建议此行为

在函数内部,类型Tvararg-parameter的数组可见T,即上述示例中的ts变量具有type Array<out T>

因此,您必须Array<String>在示例中使用。您可以使用允许使用vararg并使调用看起来像期望的普通函数,而不是将函数编写为lambda

fun f(vararg strings: String) = strings.forEach(::println)

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章