クロージャー内のクロージャーで親のクロージャーを再帰的に呼ぶ方法は?
タイトルが既によくわからない。
ネストしているクロージャーで親のクロージャーを呼べないか?と言うこと。
まぁ、コード見てください。
フォルダ内の全てのファイル名を出力
def f = {} f = { if (it.isFile()) { println it } else { it.eachFile{ f(it) } } } def str =/C:\work/ f(new File(str))
通常、再帰的な処理を行う場合にはクロージャー内でcallメソッドを使用すれば自分を呼び出せますが、↑のような場合callするとeachFileのクロージャーが呼ばれちゃいます。
なんかうまい方法ないんですかね?
というか、見た目も悪いし設計の問題かな??
// 初gist。
// デフォルトだと背景色が酷かったので↓参考にcss修正してみた。
// http://d.hatena.ne.jp/snaka72/20081218/1229622900
追記(2011/08/06)
3bcさんにコメントでowner.call()を使用すれば親を呼べることを教えていただきました。