我遇到了以下功能,
def some_name = {a, b, c -> a==c?bumpUp(b):b}
虽然我可以理解这个功能是某种简短的手(无法回想起或弄清楚长形)。它采用了3个论点,比较了同样的& c,如果相等则调用另一个函数
bumpUp(b)
所以问题是:
1.我对逻辑的假设是正确的吗?
2.写这篇文章的长篇大论是什么?它是什么?
3. :b
bumpUp(b):b
做了什么
答案 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个问题:
问题2部分:
if(a==c){
some_name = bumpUp(b)
} else {
some_name = b
}