Groovyでクロージャを宣言する
動作確認:Groovy Version: 1.5.7 JVM: 1.6.0_10
使用例
インラインで宣言して使う
一番よくみるパターン。Groovyではメソッド引数の最後がClosure型の場合、省略系の構文が使えるので便利。
def result result = [1, 2, 3].collect { it * 2 } assert result == [2, 4, 6]
変数に参照を保持して使う
一旦変数に保持しておいてから、あとで使うパターン。*1
def clos = { it * 5 } result = [1, 2, 3].collect(clos) assert result == [5, 10, 15]
メソッドからクロージャとして抽出して使う
既存のメソッドをクロージャとして抽出して使うパターン。「.&」+メソッド名の形で取得できる。*2
インスタンスメソッド、スタティックメソッドの両方ともで使える。
class Hoge { /** instanceメソッド */ def doSomethingI(x) { return x * 10 } /** staticメソッド */ def static doSomethingS(x) { return x * 100 } } def hoge = new Hoge() clos = hoge.&doSomethingI result = [1, 2, 3].collect(clos) assert result == [10, 20, 30] result = [1, 2, 3].collect(Hoge.&doSomethingS) assert result == [100, 200, 300]