Groovyイン・アクション読書会IN関西 第2回

2019-02-21Diary,Groovy

Groovyイン・アクション読書会IN関西 いってきたよ | ゲンゾウ用ポストイット に引き続き、第2回に参加してきた。

利用できる人はSkypeのオープンチャットを利用したのだけれども、僕のUbuntuでのSkypeはオープンチャットできなかった。LinuxのSkypeはv2.0で止まっているみたい。v2.6ぐらいからオープンチャット可能ということなので。残念。気づいたことをアップしてきたかった。

読書会で一番しれてよかったのはクロージャの再帰呼び出しの方法かな。

今まで再帰呼び出ししたいと思った場合には、

  1. メソッドを定義して再帰
  2. 一度空の変数を作成してから、再帰呼び出しクロージャの定義

といずれかを行っていた。

1の例

def x(n) {
    if (n > 0) {
        print n
        x(n - 1)
    }
}

x(5)

2の例

def x
x = { n ->
    if (n > 0) {
        print n
        x(n - 1)
    }
}
x(5)

クロージャで再帰呼び出しすることはできないと思ってたのデスが、以下のようにcallメソッドを使えば可能。

def x = { n ->
    if (n > 0) {
        print n
        call(n - 1)
    }
}
x(5)

それから、クロージャの asWritable メソッドが正常に動かない。

asWritable メソッドを使用して作成したクロージャのクローンは、実行後に結果を出力する設定が可能な writeTo メソッドがつかされるということなので試してみた。

def x = { "3" }.asWritable()
System.out.withWriter { w ->
    x.writeTo(w)
    x()
    w & lt; & lt; "a"
}

結果では 3a と出力されると思ったけど a しか出力されない。しかもコード実行後には println メソッド使用できなくなるし。使い方が間違っているのだろうか。うーん。

なんにせよ今回も楽しかった。読書会終了後の懇談会が飲みながらコーディングでなんだかわけがわからないコード書いていた。

2019-02-21Diary,Groovy