[#28653] create header (Re: Re: ossl_cipher.c:124: warning: control reaches end of non-void function) — "Nobuyoshi Nakada" <nobu@...>

なかだです。

8 messages 2006/05/18

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

From: Shugo Maeda <shugo@...>
Date: 2006-05-29 08:27:04 UTC
List: ruby-dev #28671
前田です。

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)
----- ここまで ----- ここまで ----- ここまで ----- ここまで -----

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

-- 
前田 修吾

In This Thread