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}

みたいな書き方を許容するため、でしょうね。