Groovy 1.8 finalを無視するオプション付のunlimited版がキターーーーーーッ!
サンテFXが織田裕二のキターーーーーーッ!CM中。
Wii、ニンテンドー3DS、iPod nanoなどがあたる サンテFX20周年キター!キャンペーン中みたいだね。
キタ顔チャレンジなんてのもやってる。
それが本題ではなくて、id:nagai_masato からも、キターーーーーーッ!
Groovyで文字列の一部を破壊的に削除する(Groovyならできるらしいのだが・・・)
で言ってた、groovy 1.8にfinalを無視するオプション付のunlimited版だ。
リクエスト頂いたので、反則技ですがgroovy 1.8にfinalを無視するオプションを追加してみました。 http://www.filehosting.org/file/details/240696/groovy-bin-1.8.0-unlimited.zip からダウンロードできます。
以下使用例です:
スクリプトを実行する場合: groovy -Dignore=final Foo.groovy
groovyConsoleを実行する場合: java -Dignore=final -cp .;embeddable\groovy-all-1.8.0.jar groovy.ui.Console
ではでは。
String.metaClass.insert << { i, s -> def chars = delegate.value as List; chars.addAll(i, s as List); delegate.value = chars as char[]; delegate.count = chars.size() } def s = 'groovy' s.insert(3, 'groovy') println s
通常のGroovy 1.8だと以下の例外になる。
[D:\workspace\groovy_SandBox]groovy Q061_文字列の一部を破壊的に削除する_delegate版.groovy Caught: groovy.lang.ReadOnlyPropertyException: Cannot set readonly property: value for class: java.lang.String at Q061_文字列の一部を破壊的に削除する_delegate版$_run_closure1.doCall(Q061_文字列の一部を破壊的に削除する_delegate版.groovy:4) at Q061_文字列の一部を破壊的に削除する_delegate版.run(Q061_文字列の一部を破壊的に削除する_delegate版.groovy:9)
Unlimited版を使うと、Groovy 1.5.6までのように、書き換えられるようになる。
[D:\workspace\groovy_SandBox]groovy -Dignore=final Q061_文字列の一部を破壊的に削除する_delegate版.groovy grogroovyovy
うひょーーー
添削歓迎
ここ間違ってるよ
こうした方がGroovyらしくないか?
などなど
方法は、コメント、トラックバック、はてブ、Twitter @orange_clover宛 で、お願いしまます。
実行環境
- OS:Windows XP
- Groovy Version: 1.8.0 unlimited版(改造版)
- JVM: 1.6.0_26
Groovyの詳細についてはJavadocと以下の書籍を参考にしている。
Dierk Konig、Andrew Glover、Paul King、、Guillaume Laforge、Jon Skeet、杉浦 孝、櫻井 正樹、須江 信洋、関谷 和愛、佐野 徹郎、寺沢 尚史
Amazonでご確認ください。
問題自体は第2版のもの。rubyと似てる部分も多いので、ヒントにもなる。
写経でもいいが自分で考えるために他言語の例をGroovyで置き換えてる。
Groovyイン・アクションを読むならあった方が便利かな。