立石です。

例外が発生したときについての処理
なんですが、たとえば以下のスクリプト
を実行すると、
--------
def foo
  raise(Exception,"foo")
end

a = 1
printf("befor begin: a = %d\n",a)
begin
  a = 2
  foo
rescue
  printf("in rescue: a = %d\n",a)
end
printf("after end: a = %d\n",a)
--------------
---- output ---
befor begin: a = 1
in rescue: a = 2
after end: a = 2
---------------
という出力になります。
rubyの処理では当然こうなるようになっている
のですが、例外が発生したらbegin..end内での
変更をすべて破棄できる仕組みを組み込めない
ものでしょうか?
もしこれがあれば
---- output ---
befor begin: a = 1
in rescue: a = 2
after end: a = 1
---------------
といった出力になり例外が発生すると思われる
箇所より前の状態に戻せるわけです。

すべての処理をこのようにするのは抵抗があるので
たとえばbegin..end内のcleanという命令で状態を
begin以前の状態に戻すなどというのは採用されない
ものでしょうか?
---------------
def foo
  raise(Exception,"foo")
end

a = 1
printf("befor begin: a = %d\n",a)
begin
  a = 2
  foo
rescue
  printf("in befor clean: a = %d\n",a)
  clean
end
printf("after end: a = %d\n",a)
-----------
--- output --
befor begin: a = 1
befor clean: a = 2
after end: a = 1
-------------
という感じになればいいなぁと思っています、、、(^^;

□□ 北陸先端科学技術大学院大学情報科学研究科  □□
□□                          博士前期課程1年  □□
□□    立石 孝彰(たていし たかあき)         □□
□□ (E-Mail)tateishi / sy.is.noda.sut.ac.jp     □□
□□ (URL)http://www.pluto.dti.ne.jp/~tateishi □□