首页 > 解决方案 > 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()

标签: groovy

解决方案


您看到是因为您在第一个案例结束时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;
    }

推荐阅读