L
larsch
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.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
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.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