Project

General

Profile

Feature #13923

Updated by nobu (Nobuyoshi Nakada) almost 2 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

Back