From: "mame (Yusuke Endoh)" Date: 2013-02-19T23:51:30+09:00 Subject: [ruby-core:52530] [ruby-trunk - Feature #7882][Assigned] Allow rescue/else/ensure in do..end Issue #7882 has been updated by mame (Yusuke Endoh). Status changed from Open to Assigned Assignee set to matz (Yukihiro Matsumoto) I have suggested the same proposal (in Japanese [ruby-dev:31393]). Matz said in [ruby-dev:31423] that it is not clear (to him) whether: loop do : rescue : ensure : end should behave like: begin loop do : end rescue : ensure : end or: loop do begin : rescue : ensure : end end -- Yusuke Endoh ---------------------------------------- Feature #7882: Allow rescue/else/ensure in do..end https://bugs.ruby-lang.org/issues/7882#change-36620 Author: charliesome (Charlie Somerville) Status: Assigned Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: Target version: 2.1.0 =begin The keywords (({rescue})), (({else})) and (({ensure})) can be used when defining methods like so: def foo # rescue # else # ensure # end However when using a block delimited by do..end, you must use (({begin}))..(({end})) as well: foo do begin # ... rescue # ... # ... end end It would be nice to be able to drop the extra (({begin}))..(({end})) and use (({rescue})), etc. clauses directly: foo do # ... rescue # ... # ... end I cannot think of any ambiguities this syntax would cause, but please correct me if I am wrong. =end -- http://bugs.ruby-lang.org/