Groovy语法解释

时间:2016-10-26 15:59:21

标签: jenkins groovy

我遇到了以下功能,

def some_name = {a, b, c -> a==c?bumpUp(b):b}

虽然我可以理解这个功能是某种简短的手(无法回想起或弄清楚长形)。它采用了3个论点,比较了同样的& c,如果相等则调用另一个函数

bumpUp(b)

所以问题是:
1.我对逻辑的假设是正确的吗? 2.写这篇文章的长篇大论是什么?它是什么? 3. :b

bumpUp(b):b做了什么

2 个答案:

答案 0 :(得分:1)

?:操作是一个三元运算符,它涉及两个?和a:,像if语句:

Boolean?true:false

相当于

if(Boolean)
    true
else
    false

除了它返回值true或false,所以:

a==c?bumpUp(b):b

就像

if(a == c)
    return bumpUp(b)
else
    return b

另请注意,groovy有一个简写,您可以在其中消除称为" Elvis"的中心值。运营商。它通常用于为变量赋予默认值。如果您想要打印出一个名称值,但是如果您想要打印null,那么您可能会说:

println "Your name is ${name?:'unknown'}"

如果变量名称没有值,则会打印" unknown"而不是null但是对于" groovy true" (不为null或为空)它将返回查询值。

答案 1 :(得分:1)

Ternary operator涉及两个?和a:是一种使用等同于if语句的简洁方法。因此减少代码冗长度使其更具可读性。

例如:

String result = (1==1) ? 'equals' : 'not equals'

让我们解释上面的一行:

如果条件(1 == 1)为真,则结果分配将为'等于,否则结果分配将为'不等于'

您可能熟悉的方法如下:

String result = ""
if(1==1) {
    result = 'equals'
} else {
    result = 'not equals'
}

为了回答你的3个问题:

  1. 你对逻辑的假设是正确的。 : - )
  2. 问题2部分中描述了编写它的漫长道路。
  3. :b 与其他部分有关。 ':'只是b变量的分隔符。 如果if(a == c)为false,则在':'之后转到部分代码。在那种特殊情况下,它是 b
  4. 问题2部分

    if(a==c){
        some_name = bumpUp(b)
    } else {
        some_name = b
    }