Feature #13923
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
In programs which grabs and releases resources very often, we need to write so much begin-ensure clauses.
```ruby
begin
storage = getStorage()
begin
buffer = storage.get(buffer_id)
# ...
ensure
buffer.close if buffer
end
rescue StorageError => e
# ...
ensure
storage.close if storage
end
```
Such code makes our code fat, and difficult to understand.
I want to write such code like below:
```ruby
# Class of storage and buffer should include a module (like Closeable)
# or be checked with respond_to?(:close)
begin(storage = getStorage(); buffer = storage.get(buffer_id)
# ...
rescue StorageError => e
# ...
end
# (buffer.close if buffer) rescue nil
# (storage.close if storage) rescue nil
```
Other languages also have similar features:
* Java: try-with-resources
* Python: with