Wrote a fun little groovy script earlier today to copy IMAP messages to Exchange. JavaMail and Groovy made this pretty simple, so simple I had to do a bit of gold plating. Oh well =)
The fun part is in this snippet:
traverse = { folder, operation |
traverse_subfolders = { folder, operation |
recur = this
folder.list().each {
operation(it)
recur(it, operation)
}
}
operation(folder)
traverse_subfolders(folder, operation)
}
Groovy suffers from a cannot-call-closure-by-name-from-itself problem. Because the closure is a first class object though, you have access to it via this
, so you can, in fact, recur on your closure.