Project

General

Profile

Feature #13923

Updated by nobu (Nobuyoshi Nakada) over 6 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