lambda中的vararg参数

Dav*_*oko 14 lambda kotlin

我想定义一个函数f()如下:

val f: (vararg strings: String) -> Unit = { for (t in it) println(t) }
Run Code Online (Sandbox Code Playgroud)

所以我可以调用它f("a","b","c").对于上面的定义f()我得到了编译错误(指向vararg修饰符):

Unsupported [modifier on parameter in function type]
Run Code Online (Sandbox Code Playgroud)

如何定义接受vararg参数的lambda ?

s1m*_*nw1 6

我担心这是不可能的.以下演示了函数的类型vararg.甲vararg参数由一个表示Array:

fun withVarargs(vararg x: String) = Unit

val f: KFunction1<Array<out String>, Unit> = ::withVarargs
Run Code Online (Sandbox Code Playgroud)

文档中也建议了此行为:

在函数内部,类型的vararg参数T作为数组可见T,即上例中的ts变量具有类型Array<out T>.

所以你必须Array<String>在你的例子中使用一个.您可以使用允许使用vararg并根据需要调用调用的普通函数,而不是将函数编写为lambda :

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

f("a","b","c")
Run Code Online (Sandbox Code Playgroud)

  • 这种限制对我没有意义.我理解在函数体中,vararg-parameter作为数组可见,但在Java中也是如此.这与lambda中不允许vararg有什么关系? (3认同)