From: larsch@... Date: 2007-09-04T18:50:13+09:00 Subject: Resource Acquisition & Cleanup Hello Rubyists, I am looking for a style or idiom that I can apply to a resource management problem. I have a number of resources (objects) that I need to release if any exception is thrown. While ensure-blocks or block parameters work well for few resources, they get cumbersome when you have many resources, or when the number of resources is not known. Let's say I have something similar to this: resources = [] n.times { |i| resources.push( Resource.new(i) } } loop { # do some processing on the resources } n.times { |i| resources[i].release } If an exception is thrown in the main processing loop, i still need to release the resources. If an exception is thrown during construction, i need to release the resources already succesfully created. If an exception is thrown while releasing a resource during exception handling, i still need to release the remaining resources. Is there a way to do this, especially when 'n' is unknown? Regards, Lars