【发布时间】:2014-11-02 14:31:43
【问题描述】:
有几个 Ruby C API 函数用于运行一些 Ruby 代码。大多数只是像require 那样在隔离绑定中运行代码。但其中一些首先将代码包装在匿名模块中,然后再运行它。例如,rb_load 需要一个参数来表示您是否想要这种包装,rb_eval_string_wrap 只是 rb_eval_string_protect 但有包装。
在 C 中,包装如下所示:
/* load in anonymous module as toplevel */
th->top_self = rb_obj_clone(rb_vm_top_self());
th->top_wrapper = rb_module_new();
rb_extend_object(th->top_self, th->top_wrapper);
这样做有什么意义?我已经测试了这些函数以及它们未包装的等效函数,结果始终相同。是否有一些我没有看到的用例?
【问题讨论】:
-
嘿,感谢您在一年多后随机投反对票,没有发表评论。
标签: c ruby ruby-c-extension