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
相关产品推荐
相关产品推荐

