org.codehaus.groovy.syntax.SyntaxException
思い切りはまった。Groovyのスクリプトファイルを実行すると次のようなメッセージが表示された。
C:\work\groovy\example>groovy test.groovy Caught: org.codehaus.groovy.syntax.SyntaxException: Cannot use a class expressio n on the left hand side of an assignment. At [-1:-1] test.groovy
原因はgroovyのスクリプトファイルと同名の変数に値を代入しようとしたから。
たとえば「test.groovy」というファイルを使う場合、次のようなコードで実行するとSyntaxExceptionとなる。
test = 'hoge'
testは暗黙的に定義されているClass型の変数扱いになり、この場合だと自分自身の「test」クラスを持っていることがわかった。すなわち次のコードが問題ないことになる。
assert test === this.class
次のようなこともわかった。クロージャを使ってみた場合...
list = [1,2,3] list.each { test | println test }
結果はこんな風になる。
class test class test class test
一方、forループを使ってみた場合は...
list = [1,2,3] for (test in list) { println test }
Exceptionが発生する。
ファイルと同名の変数を使わないようにしないといけないのか。でも絶対うっかり使ってしまうだろうな。