In article <46A92530.80507 / for.mail-box.ne.jp>, eklerni <eklerni / for.mail-box.ne.jp> writes: > 人工的な例ですが、 > > 「取得するたびに値の変わっていくローカル変数(big)を引数にとり、一秒間隔 > でその変数を使って > なんかするメソッド(foo)をつくりたいとする。ただしメソッド定義内部(と実 > 引数部)に直接変数名bigを書き込むような > ことはしたくない。」 > > retryを使うとこんな感じになります。↓ > > big = 0 > Thread.new{loop{sleep 0.7;big += 1}} #big の時間変化 > > def foo(n) > sleep(1) > yield n > retry > end > > foo(big){|n|p n} #=>1,2,4,5,... それなら retry を使わなくてもブロックの中で big を参照すれば いいのではありませんか? % ruby -e ' big = 0 Thread.new{loop{sleep 0.7;big += 1}} def foo while true sleep 1 yield end end foo { p big } ' 1 2 4 5 7 ... メソッドの引数の評価からやり直す retry が役に立つと思える例 はないんでしょうか。 -- [田中 哲][たなか あきら][Tanaka Akira]