前田です。
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 ...
|
|
|
|