GStringの評価の仕組み
出遅れてますが、Groovyラボの記事を呼んで、コードレベルでどうなってるかを考えて見ました。
(1)GStringクラスの定義
Groovyのソースを全く見てませんが、おそらく、例えば
class GString { List list GString(List l) { list = l } String toString() { list.collect{it.toString()}.join() } }
(2) GStringの出現
ソース中にGStringが現れたとき、例えば
"AAA${xxx}BBB"
が現れたとき、以下のように置換される。
new GString(["AAA", {xxx}.call(), "BBB"])
$iは${i}と等価と仮定(本当か)。クロージャではあるが、クロージャは即座に評価されるので遅延評価はされていない。