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

如何在Groovy闭包中用星号展开运算符拆解末尾参数?

Groovy闭包中实现类似Python的参数部分拆解

要实现类似Python中first, *others的列表部分拆解效果,Groovy里可以通过两种方式解决:

方法1:闭包内部解构赋值

直接在闭包内对传入的列表进行解构,这是最直观的写法:

inputs = [['a', 'b', 'c', 'd'], ['A', 'B', 'C']]

inputs.each { list ->
    def (first, *others) = list
    println "first=$first others=${others.join(',')}"
}

执行后输出:

first=a others=b,c,d
first=A others=B,C

方法2:闭包参数括号解构

给闭包参数加上括号,明确告知Groovy要对传入的单个列表进行解构:

inputs = [['a', 'b', 'c', 'd'], ['A', 'B', 'C']]

inputs.each { (first, *others) ->
    println "first=$first others=${others.join(',')}"
}

输出结果和方法1完全一致。

为什么之前的尝试失败?

  • 尝试1的first, *others ->写法错误:Groovy默认把inputs中的每个元素当作闭包的单个参数,这里每个元素都是完整列表,所以first会被赋值为整个列表,others因无额外参数而为空。
  • 尝试2的String... others可变参数写法同理:闭包将整个列表作为第一个参数first传入,没有后续参数,因此others始终是空数组。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 19:02:39