No Programming, No Life

プログラミング関連の話題や雑記

GroovyでTemplateEngineとbinding

via twitter4j+Groovyテンプレートエンジンを試しに使ってみた。 - けみかるGroovy日記 - はてなGroovyグループ by けみかるさん(id:tmftake)

以下の部分が、LinkedHashMapをbingdingクラスにキャストできないよーと怒られてました。
binding = ["statuses": statuses]

これですが、ちょっと調べてみたら

Caught: java.lang.ClassCastException: java.util.LinkedHashMap cannot be cast to groovy.lang.Binding

ってExceptionが発生するみたいですね。

groovy.lang.Binding

これはたぶん、classで囲まない.groovyファイルなんでgroovy.lang.Scriptを継承したクラスが勝手に自動生成されるんですがその際の引数の名前がbindingっていうのがあるのでそれかと思います。
動的に文字列をGroovy Scriptとして動作させるときの機構です。

ということで、結論としては

予約語みたいなもん!」ってことでしょうか

defを使うと、ローカル変数として宣言されるため、それが隠されるのでエラーにならないと勝手に解釈。