From: Tanaka Akira Date: 2007-07-27T06:46:08+09:00 Subject: [ruby-dev:31308] Re: retryの使い方 In article <46A909DD.1070405@for.mail-box.ne.jp>, eklerni writes: > 前回のはwhileを使わずにwhileを定義するにはretryが必要、という要旨の発言 > ですが、 でも、while は実際にあるんですから、while をユーザが定義する 必要はありません。元からある while を使えばいいんです。 つまり while それ自体は、ユーザが定義できたからって実際のプ ログラミングで役に立つわけではないんです。 なので、while ではない異なるものを定義するのに retry が欲し くなる例を尋ねさせていただきました。 で、その例ですが、 > 実際にretryがあったほうがうれしい場面を考えてみると、たとえば > > def foo > while 条件 > yield #ループ本体(Y) > end > #なんらかの処理(A) > end > > みたいなメソッドを書いたときに、yieldとyieldの間と#なんらかの処理(A)の後で > 共通の#後処理(B)をしたいとします。(Y)(B)..(Y)(B)(Y)(A)(B)みたいに。すると > > def foo > while 条件 > #後処理 if 二回目のループからtrueになるフラッグ > yield > end > #なんらかの処理 > #後処理 > end > > みたいになって、#後処理のコードが分かれちゃうんですが、retryを使えば > > def foo > yield > retry if 条件 > #なんらかの処理 > ensure > #後処理 > end > > とロジックがすっきりする場面もあります。 foo には引数がないので、retry の奇妙な点であるところの実引数 の評価から再開される、という部分が使われていませんが、実引数 が再評価されることは不要ですか? -- [田中 哲][たなか あきら][Tanaka Akira]