Jenkinsfile/Ggroovy:为什么字典AND integer的结果是一个整数



在Groovy/Jenkinsfile声明性语法中,为什么对dictionary、dictionary和integer对象执行布尔AND操作的结果是整数而不是布尔true/false

pipeline {
agent any
stages {
stage( "1" ) {
steps {
script {
a = [:]
a.a = [:]
a.a["a"] = "1"
a.a["b"] = "2"
echo "${a}"
echo "${a.a}"
echo "${a.a.size()}"
def my_bool = (a && a.a && a.a.size())
echo "my_bool ${my_bool}"
}
}
}
stage( "2" ) {
when {
expression { true == (a && a.a && a.a.size()) } // Fails because result is integer "2", not boolean "true"
}
steps {
script {
echo "hello, world!"
}
}
}
}
}

我对其他编程语言的偏见导致我认为a && a.a && a.a.size()应该隐式地转换为布尔值。echo表明该值为整数2

处理此问题的Jenkins/Groovy惯用方法是什么即如果一个阶段是以";字典是非空的并且具有非零大小";,习惯上正确/首选的写条件语句的方式是什么?


更新:注意:echo "my_bool ${my_bool}"语句打印";my_bool 2";。这是Jenkins 2.222.3版本。

expression { a?.a?.size() }

甚至

expression { a?.a }

相关内容

  • 没有找到相关文章

最新更新