Issue #11538 has been updated by Yukihiro Matsumoto.


`ensure => e` で e が受け取る値を明確に定義してください。ensureはいろいろな場合(正常終了、例外、throwなど)に呼ばれるので、それぞれのケースについてどうなるのかが気になります。

Matz.


----------------------------------------
Feature #11538: ensure variable syntax
https://bugs.ruby-lang.org/issues/11538#change-54238

* Author: yasuhiro arima
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------

ensure の構文を拡張して、コンテキストの値を受け取れるようにする提案です。
rescue で例外オブジェクトを変数に受けて参照するのと同様に、ensure で結果のオブジェクトを参照します。

  ensure '=>' lhs

途中での return による打ち切りなどによって、適切でない値が返ることがあります。
現状でこれを確認するためには、ensure で参照できるようにあらかじめ変数に束縛する必要があります。

~~~ruby
def abs( arg )
  retval = nil
  return  retval =  arg    if arg > 0
  return  retval = -arg    if arg < 0
  retval

ensure
  p  retval

end
~~~

これを ensure で変数に束縛できると、記述が簡潔になります。

~~~ruby
def bar( arg )
  return  arg    if arg > 0
  return -arg    if arg < 0

ensure => retval
  p  retval

end
~~~
パッチはつくっていませんが、そろそろ締め切りらしいので提案してみます。




-- 
https://bugs.ruby-lang.org/