我想定义一个函数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中也建议此行为:
在函数内部,类型
T
为vararg-parameter的数组可见T
,即上述示例中的ts变量具有typeArray<out T>
。
因此,您必须Array<String>
在示例中使用。您可以使用允许使用vararg
并使调用看起来像期望的普通函数,而不是将函数编写为lambda :
fun f(vararg strings: String) = strings.forEach(::println)
f("a","b","c")
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句