logo       
Google Custom Search
    AddThis Social Bookmark Button

[ruby-dev:28671] Re: load_to(file, mod): msg#00059

Subject: [ruby-dev:28671] Re: load_to(file, mod)
前田です。

Hidetoshi NAGAI wrote:
> やりたいのは,$SAFE == 4 で load(path, true) したスクリプト中の
> load(path2) を同じ無名モジュール中で評価したいというものです.
> さらには,load() の外から load 内の監視もしたいと思ってます.
>
> load メソッドをくるんでやることである程度までは行けるのですが,
> 無名モジュールが取得できなくてだめだったり,
> それを避けると self が main ではなくなってしまったりで頭を悩ませてます.
>
> mod.module_eval(File.read(path)) の File.read(path) を
> うまくくるんでやって,self が mod になってしまう点は
> 妥協するしか方法はないのでしょうか.

generate_binding.rbという名前で

----- ここから ----- ここから ----- ここから ----- ここから -----
$binding = binding
----- ここまで ----- ここまで ----- ここまで ----- ここまで -----

という内容のファイルを用意しておいて、

----- ここから ----- ここから ----- ここから ----- ここから -----
def generate_binding
  Thread.critical = true
  begin
    load("generate_binding.rb", true)
    return $binding
  ensure
    Thread.critical = false
  end
end

b = generate_binding
# 1回目の実行
eval("def hello; puts 'hello world'; end", b)
# 2回目の実行
eval("hello", b)
----- ここまで ----- ここまで ----- ここまで ----- ここまで -----

という手を使うのはどうでしょうか。

-- 
前田 修吾





Try Searching:
servers, voip, java, networking, microsoft ...
<Prev in Thread] Current Thread [Next in Thread>