Groovyイン・アクション読書会IN関西 第2回
Groovyイン・アクション読書会IN関西 いってきたよ | ゲンゾウ用ポストイット に引き続き、第2回に参加してきた。
利用できる人はSkypeのオープンチャットを利用したのだけれども、僕のUbuntuでのSkypeはオープンチャットできなかった。LinuxのSkypeはv2.0で止まっているみたい。v2.6ぐらいからオープンチャット可能ということなので。残念。気づいたことをアップしてきたかった。
読書会で一番しれてよかったのはクロージャの再帰呼び出しの方法かな。
今まで再帰呼び出ししたいと思った場合には、
- メソッドを定義して再帰
- 一度空の変数を作成してから、再帰呼び出しクロージャの定義
といずれかを行っていた。
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
メソッド使用できなくなるし。使い方が間違っているのだろうか。うーん。
なんにせよ今回も楽しかった。読書会終了後の懇談会が飲みながらコーディングでなんだかわけがわからないコード書いていた。
ディスカッション
コメント一覧
def x = { out -> out << "3" }.asWritable()
System.out.withWriter{ w ->
x.writeTo(w)
w<<"a"
}
ですかね。
printlnができなくなるのはwithWriterがクローズしてしまうからですねきっと。