returnはreturnでcollectメソッドとかに使いたいので、
他の代用にされてしまうと困るかも。

char[][] titles = books.collect() do (Book book){
 return book.title;
};

opApplyはbreakとかサポートするために、
どうにも妙な作りになっちゃってるんだよね・・。
正直、Exception使ったほうがマシだった気がする。

Rubyじゃどう解決してたか、詳しい人いる?