https://jira.codehaus.org/browse/GROOVY-6623
で対処されました。
% groovysh Groovy Shell (2.4.0-beta-1, JVM: 1.8.0_11) Type ':help' or ':h' for help. ------------------------------------------------------------------------------------------------------------------------------- groovy:000> def x = 3 ===> 3 groovy:000> x ===> 3 groovy:000> :set Preferences: interpreterMode=true groovy:000> x.class ===> class java.lang.Integer groovy:000> String x = 3 ===> 3 groovy:000> x.class ===> class java.lang.String groovy:000>
こうです。
(2014/07/31追記)
もちろん、defに限らず
groovy:000> String t = "abc" 000> String t = "abc" ===> abc groovy:000> t 000> t ===> abc
のように型を指定してもOKです。ローカル変数のスコープが、1行単位ではなく、セッションを通じて有効になる、という話。今までは一行ごとだった、つまり
groovy:000> String s="a"; s 000> String s="a"; s ===> a
はエラーにならなかった。
(2014/07/31追記終り)
前の動作に戻すには、
groovy:000> :set interpreterMode false groovy:000> def y = 3 ===> 3 groovy:000> y Unknown property: y
こうします。なんで今まで…、っていう話はあるんでしょうが、行ごとにnew GroovyShell()してたから、という実装の都合で、まあ、あれだ。
また、別件ですが、
https://jira.codehaus.org/browse/GROOVY-6754
によれば、
groovyshに、groovyコマンドと同様に-eオプションが指定でき、groovysh起動のタイミングで固有の初期設定コードが実行できるようになりました。