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 に答える