是否可以在Groovy的条件运算符中包含带有表达式的语句?这就是我现在正在做的事情,我希望在一个带有println语句的条件语句中将其分解......
if(!expired){
println 'expired is null'
return true
}
else if( now.after(expired)){
println 'cache has expired'
return true
}
else
return false
转换为单一陈述......
return (!expired) ? true : (now.after(expired)) ? true : false
...想为调试目的做这样的事情......
return (!expired) ? println 'expired is null' true : (now.after(expired)) ? println 'cache has expired' true : false
答案 0 :(得分:8)
正如GrailsGuy在另一个答案中所说,使用闭包:
def expired= false, expired2= true
return (!expired) ?
{println "expired is null"; true}() :
(expired2) ? {println "cache has expired"; true}() : false
答案 1 :(得分:4)
我相信Groovy三元运算符的行为与Java相同,因此只允许表达式。
现在你拥有它的方式根本不合法:
println 'expired is null' true
问题是它需要分号或新行,并且不会收到分号。
将其更改为:
println 'expired is null'; return true;
也不起作用,这支持了它只允许表达式的事实。如果你真的想使用三元运算符并执行多行,那么最好将该逻辑放在方法(或闭包)中。