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]