【发布时间】:2020-06-11 16:54:50
【问题描述】:
我在 Groovy 中有这段代码;
def execution = []
def executor =[:]
for(loopcount=1;loopcount<4;loopcount++){
executor.executor = 'jmeter'
executor.scenario = 'scenario' + loopcount
println executor.scenario
executor.concurrency = 2
execution.add(executor)
}
execution.each{
println executor.scenario
}
它是三张地图的列表,除了场景后缀增量之外,所有地图都相同。我期待;
scenario1
scenario2
scenario3
scenario1
scenario2
scenario3
但我明白了;
scenario1
scenario2
scenario3
scenario3
scenario3
scenario3
它肯定会在列表中添加三个不同的映射,因为 .each 命令返回三个值。它们在 executor.scenario 中绝对是不同的值,因为循环中的 println 给出了正确的 '1, 2, 3' 计数。但是为什么它们不在列表中保留为不同的值呢?
我也尝试过 execution.push(executor) ,但结果相同。就上下文而言,这个 yaml 是我最终的目标;
---
execution:
- executor: "jmeter"
scenario: "scenario1"
concurrency: 2
- executor: "jmeter"
scenario: "scenario2"
concurrency: 2
- executor: "jmeter"
scenario: "scenario3"
concurrency: 2
除了场景计数之外,其余部分都可以正常工作。
【问题讨论】:
-
这里有'byval'和'byref'的概念吗?如果是这样,我是否需要对 execution.add(executor) 做一些事情以使其获取值而不是引用?
-
只需将
def executor =[:]声明移动到for循环内