Groovy 1.8 finalを無視するオプション付のunlimited版がキターーーーーーッ!


キターーーーーーッ!

サンテFX織田裕二のキターーーーーーッ!CM中。
Wiiニンテンドー3DSiPod 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で置き換えてる。




青木 峰郎、後藤 裕蔵、高橋 征義、まつもと ゆきひろ

価格: ¥ 2,940
価格は記載時点のものです。購入前にAmazonでご確認ください。




Groovyイン・アクションを読むならあった方が便利かな。

Rubyレシピブックは「ほんたった」で立ててる