Jenkinsfile/Groovy: 为什么字典和整数的结果是整数?

Jenkinsfile/Groovy: why is result of dictionary AND integer an integer?

在Groovy/Jenkinsfile声明性语法中,为什么对字典、字典和整数对象进行布尔运算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 惯用方法是什么? 即如果一个阶段以“字典为非空且大小为非零”为条件,那么写该条件的惯用 correct/preferred 方式是什么?


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

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

甚至

expression { a?.a }