gpt4 book ai didi

groovy - 如何执行闭包作为 Groovy 映射的值?

转载 作者:行者123 更新时间:2023-12-01 12:08:55 26 4
gpt4 key购买 nike

我有以下代码

#!/usr/local/homebrew/bin/groovy

def jobs = ['Groovy', 'Rocks', 'Big', 'Time']

def generateStage(String service, Integer sleepTime=0) {
return {
sleep sleepTime
println "Hello $service"
}
}

Map generateStageMap(List list) {
Integer sleepTime = 0
Map stageMap = [:]
list.each {
stageMap[it] = generateStage(it, sleepTime)
// slightly staggered starts so we don't have too many
// request per sec to the CLI
sleepTime += 5
}
return stageMap
}

Map map = generateStageMap(jobs)
map.each {
it.value
}

我如何让它执行 println 语句使输出看起来像这样?
Hello Groovy
Hello Rocks
Hello Big
Hello Time

或者更好的是,我如何检查生成的闭包是否包含 key 。例如,在伪代码中
map.each {
// just sample code that conveys the idea
assert it.value.contains(it.key)
}

最佳答案

您的代码缺少闭包调用。首先值得一提的是,您创建的 map 属于以下类型:

Map<String,Closure> map = generateStageMap(jobs)

您放在示例末尾的代码什么也不做。
map.each {
it.value
}

它只“接触”存储在映射中的值,但不调用它所持有的闭包。获得预期输出的最简单方法是实际调用闭包。您可以通过调用 call() 来实现。方法:
map.each {
it.value.call()
}

或者简单地添加 ()到表达式的结尾:
map.each {
it.value()
}

两者都将调用闭包并产生您期望的输出。

关于groovy - 如何执行闭包作为 Groovy 映射的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54135764/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com