前田です。

keiju / bc.mbn.or.jp (石塚圭樹 ) wrote:

|マクロは, 関数呼出側のコンテキストで処理を進めるところに意味があると思
|うのですが, マクロではなくてもいいのでそういう機能をrubyで付加すること
|はできないですかねえ? つまり, 呼出側のbindingを呼び出され側で参照する
|ことができると色々便利なのですが... そうすると, マクロはなくても同等な
|機能を通常の関数で実現できる(苦労のレベルは別として)と思うのですが, い
|かがでしょう?

これは、

def foo(b)
   eval "p bar", b
end

bar = "this is a local variable."
b = binding
foo(b)

と等価なことが

def foo
   eval "p bar", caller_binding
   # caller_bindingは呼び出し側のbinding情報を持つ擬似変数
end

bar = "this is a local variable."
foo

みたいにできれば...ということでしょうか。

あんまり関係ないかもしれませんが、with_bindingみたいな
メソッドがあると便利かなと思います。
これを使えば上のは

def foo
   with_binding caller_binding do
      p bar
   end
end

bar = "this is a local variable."
foo

と書けますよね。
# evalだと長くなるとちょっと見にくいような気がするので...。
# でもあまり使わないかな。

-- 
前田 修吾