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が発生する。

ファイルと同名の変数を使わないようにしないといけないのか。でも絶対うっかり使ってしまうだろうな。