我想定义一个函数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 ?
我担心这是不可能的.以下演示了函数的类型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)
| 归档时间: |
|
| 查看次数: |
2671 次 |
| 最近记录: |