From: Yukihiro Matsumoto Date: 2007-11-14T17:29:08+09:00 Subject: [ruby-dev:32291] Re: toplevel irb method まつもと ゆきひろです In message "Re: [ruby-dev:32290] Re: toplevel irb method" on Wed, 14 Nov 2007 17:19:27 +0900, Yukihiro Matsumoto writes: |手元では | |@binding = eval("def irb_binding; binding; end; irb_binding", | TOPLEVEL_BINDING, | __FILE__, | __LINE__ - 3) | |eval("def foo; p 42; end", @binding) | |を実行した場合、fooはprivate methodになりました。なにが違うん |でしょうね。どうもYARVではvibisibility情報がbindingではなく、 |crefに格納されているようで、静的に解決されてるみたいですけど、 |それと関係あるのかなあ。 あ、見落としてました。1.9ではちゃんとprivateになります。って、 元々のメール読んだら1.8.6って書いてあるし。 |visibilityがcrefにあることとか、静的に解決されちゃう(evalで |すりかわらない)こととかはどうよ、という気もしないでもないの |ですが、それは後で考えることにしましょう。 1.8ではknow restrictionということでどうでしょう? もしかしたら、Binding#dupでローカル変数のスコープをコピーす ればいいのかなあ。