2011-09-24 112 views
0

我似乎已經寫了一個遞歸閉包:)難度不夠,但我沒有掙扎如何​​從這封閉反饋。我的書面封閉從文件系統的起點遞歸地刪除一個文件。我想現在有多少文件已被刪除!如何從遞歸Groovy閉包獲取返回值?

如何才能獲得我已刪除多少文件的反饋?我試圖與委託等,但到目前爲止沒有運氣..

def deleteClosure 
    deleteClosure = { 
     it.eachDir(deleteClosure) 
     it.eachFileMatch(~".*123.jpg") { 
      it.delete() 
     } 
    } 
deleteClosure(new File("/tmp/delete.me")) 

回答

2

沒有必要寫自己的遞歸封閉的代碼,Groovy中增加了一個eachFileRecurse方法文件對象。遭到刪除,你可以永遠只是增加一個計數器的文件數:

import groovy.io.* 

def filesDeletedCount = 0 
new File('/tmp/delete.me').eachFileRecurse(FileType.FILES) { 
    if (it.name ==~ /.*123.jpg$/) { 
     it.delete() 
     filesDeletedCount++ 
    } 
} 

println "Files deleted: ${filesDeletedCount}" 
+0

需要注意的是,爲教育目的,使用外部計數器將在原來的例子正常工作。但是,只要有可能,最好使用內置方法。 – OverZealous

+0

Groovy讓我一次又一次驚奇!非常感謝您指出我!我實現了上面提到的建議,它工作的很完美! – Marco