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

Groovy数组使用`{}`初始化元素后赋值输出异常是什么原因?

问题原因

你混淆了Groovy中两种字面量的语法:

  • {} 是*闭包(Closure)*的字面量,不是空Map
  • 空Map的正确字面量写法是[:]

你写的def hosts = [{}, {}]实际创建了包含两个闭包实例的列表,而非你预期的两个空Map。当你给闭包动态设置id属性时,Groovy默认会将属性写入闭包的delegate对象,你定义的两个闭包的delegate都指向当前脚本的同一个实例,因此第二次赋值hosts[1].id = 222会直接覆盖第一次的赋值结果,最终两次打印的都是脚本实例上的id属性,自然只会输出222。

修复方案

将列表中的闭包字面量替换为Map字面量即可:

def hosts = [[:], [:]]
hosts[0].id = 111
hosts[1].id = 222
println hosts[0].id
println hosts[1].id

修改后运行即可得到你预期的输出结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 14:06:03