4

是否可以使用 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
4

2 回答 2

8

正如 GrailsGuy 在另一个答案中所说,使用闭包:

def expired= false, expired2= true
return (!expired) ? 
  {println "expired is null"; true}() :
  (expired2) ? {println "cache has expired"; true}() : false
于 2012-10-18T20:32:02.293 回答
4

我相信 Groovy 三元运算符的行为与 Java 相同,因此只允许表达式。

你现在拥有它的方式根本不合法:

println 'expired is null' true

问题是它需要一个分号或新行,并且没有收到一个。

将其更改为:

println 'expired is null'; return true;

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

于 2012-10-18T20:22:36.637 回答