{}がクロージャーに使用されているのがわかります。そして、中括弧の前に$が置かれると、それは単に文字列内で変数置換を行うだけだと思います。参照で$がどのように機能するかについてのドキュメントが見つかりません...残念ながら検索するのは難しく、Groovy Stringのドキュメントはこれを紹介することに欠けています。ドキュメントを参照したり、Groovyの「$」演算子を説明したりできますか? GrailsはGroovyを超えて拡張しますか?
GString(groovy文字列)では、有効なGroovy式をメソッド呼び出しなどを含む$ {...}で囲むことができます。
これは 次のページ で詳しく説明されています。
Grailsは、Groovyを超えて$の使用を拡張しません。次に、$の2つの実用的な使用法を示します。
GString内では、{}なしで$を使用してプロパティパスを評価できます。
def date = new Date()
println "The time is $date.time"
プロパティパスよりも複雑な式を評価する場合は、$ {}を使用する必要があります。
println "The time is ${new Date().getTime()}"
プロパティに動的にアクセスする
def prop = "time"
new Date()."$prop"
メソッドを動的に呼び出す
def prop = "toString"
new Date()."$prop"()
コメントで指摘されているように、これは実際には文字列補間の特殊なケースにすぎません。これは、以下も有効であるためです。
new Date().'toString'()
$
はGroovyの演算子ではありません。文字列置換では、文字列内の変数を識別します-魔法はありません。多くのテンプレートおよびプログラミング言語でインライン変数に使用される一般的な形式です。
特別なGroovy演算子はすべてここにリストされています: http://groovy-lang.org/operators.html