Closureリテラルのメンバにアクセスするときは、前の行にセミコロンが要る
ちょっと意味不明ですね。後置ifの例で行きます。
def executed = false; {->executed = true}.if('a' == 'A') assert executed == false; {->executed = true}.if('a'.equalsIgnoreCase('A')) assert executed == true
なんか、セミコロンが不自然に入ってますよね?これ、要るんです実は。これつけないと、なんか前の文と引っ付いちゃったりするんですね。
def executed = false {->executed = true}.if('a' == 'A')
なんて書くと、
def executed = false{->executed = true}.if('a' == 'A')
と認識されて…
def executed = false({->executed = true}).if('a' == 'A')
てなっちゃいます。
[1,2,3].collect{it+3}.each {println it}
て書けるため…てんな書き方するか!…まぁ改行も空白文字の1つって扱いなので
[1,2,3].collect {it+3} .each {println it}
みたいな書き方を許容するため、でしょうね。