Groovy的三元条件运算符是否支持语句,而不仅仅是表达式?

时间:2012-10-18 18:40:56

标签: groovy expression conditional-operator statements

是否可以在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

2 个答案:

答案 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;

也不起作用,这支持了它只允许表达式的事实。如果你真的想使用三元运算符并执行多行,那么最好将该逻辑放在方法(或闭包)中。