立石です.

以前 ruby-list で行ったブロック変数をブロックに対する局所変数
にできないかということについてですが,コールバックを定義する場
合,定義した場所を意識して変数を付けるわけではなく,コールバッ
クが実行される(変数に値が入る)場所での変数の役割を意識すると思
います.
ブロックを考えた場合でも同じで,ブロックを作った場所でのブロッ
ク変数の役割を考えるわけではなく,ブロックが使われる場所での
変数の役割を考えると思います.
そのため,定義された時点での変数と重なると都合が悪いと思うので
すがどうでしょうか?

たとえば,こんな感じのコードなどを見て思ったのですが…

class Foo
  def set_callback(&f)
    @callback = f
  end

  def set_data(data)
    @data = data
  end

  def do_callback
    set_data(@callback.call(@data))
  end
end

data = 0  # set_data()に渡す引数として data と名前を付けた.
foo = Foo.new
foo.set_data(data)
foo.set_callback{|data| data + 1} # @dataの値が入るものとして data と名前を付けた
foo.do_callback()
-- 
Takaaki Tateishi <ttate / kt.jaist.ac.jp>