You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Kotlin中定义接收vararg参数的Lambda函数?

解决Kotlin中定义接收vararg参数的Lambda函数问题

哎,这个坑我之前踩过!你遇到的编译错误是因为Kotlin的函数类型语法本身不支持在参数里直接使用vararg修饰符,不过有两种简单的办法能实现你想要的调用效果:

方法一:用匿名函数替代Lambda

这是最直接的方案,因为匿名函数允许使用vararg参数,而且调用方式完全符合你的预期:

val f = fun(vararg strings: String) {
    for (str in strings) println(str)
}

// 直接调用,和你想要的一样
f("a", "b", "c")

匿名函数的语法天生支持vararg修饰符,完美绕过了函数类型不支持的限制,调用起来也不需要额外的语法糖,和你最初的预期完全匹配。

方法二:用数组参数+展开运算符(Lambda形式)

如果你坚持要使用Lambda表达式,可以把参数定义为数组类型,调用时用*展开数组:

val f: (Array<String>) -> Unit = { arr ->
    arr.forEach { println(it) }
}

// 调用时需要用*展开数组
f(*arrayOf("a", "b", "c"))

这种方式能保留Lambda的写法,但调用时需要手动创建数组并展开,不如第一种方法简洁。

为什么原来的写法不行?

Kotlin的函数类型(比如(vararg String) -> Unit)的语法规范里,vararg是不允许出现在函数类型的参数列表中的,这是语言层面的明确限制,所以直接在Lambda的函数类型里加vararg会触发编译错误。

内容的提问来源于stack exchange,提问作者David Soroko

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:44:36