groovy - Groovy 开关未按预期运行
问题描述
我有下面的 test.groovy 脚本,但是当我运行它时,我得到以下输出。
groovy test.groovy
set color to good
set color to unstable
unstable
为什么我看到“将颜色设置为好”?
第 13 行状态
case "SUCCESS" :
但是 buildStatus 是“不稳定的”
我以前从未在 groovy 中使用过 switch 语句,因此可能会丢失一些非常基本的东西。
test.groovy
def print_arg(def arg){
buildStatus = "UNSTABLE"
previousBuild = "FAILURE"
// println "$arg"
switch(buildStatus) {
case { it != "SUCCESS" } :
switch(previousBuild) {
case "SUCCESS" :
println "set color to danger"
color = 'danger'
break;
}
case "SUCCESS" :
switch(previousBuild) {
case { it != "SUCCESS"} :
println "set color to good"
color = 'good'
break;
}
case "UNSTABLE" :
println "set color to unstable"
color = 'unstable'
break;
}
println "$color"
}
print_arg()
解决方案
您看到是因为您在第一个案例结束时set color to good
没有声明。break
第一种情况与 匹配{ it != "SUCCESS" }
,嵌套开关不匹配。然后执行由于缺少break
之前的情况而进行到第 2 种情况。第二种情况执行并且也没有 a break
,因此它属于第三种情况。
因此,switch
它完全按照它应该的方式运行。
我不确定你的初衷是什么,嵌套switch
操作不会增加你代码的可读性,但我会这样写你的代码:
switch(buildStatus) {
case { it != "SUCCESS" } :
switch(previousBuild) {
case "SUCCESS" :
println "set color to danger"
color = 'danger'
break;
}
break // << ADD THIS
case "SUCCESS" :
switch(previousBuild) {
case { it != "SUCCESS"} :
println "set color to good"
color = 'good'
break;
}
break // << ADD THIS
case "UNSTABLE" :
println "set color to unstable"
color = 'unstable'
break;
}
推荐阅读
- django - 该字段是用对“app.model”的惰性引用声明的,但应用程序不提供模型
- phonegap - 创建 PhoneGap 应用程序:Hello World 编译错误
- javascript - 连接生产环境后出现“evernote.Client.getRequestToken”的401错误
- angular - 如何在 Angular 中使用 useFactory 根据某些条件延迟加载模块?
- python - 从数据框中选择每组时间差异最小的行
- r - 如何汇总 r 中不同列的级别
- php - Instagram Basic Display API - 此授权码已被使用
- go - 如何检测带有errors.Is的json.SyntaxError
- oracle - 通过分组更新计数器
- java - Redisson 异步处理消息