gpt4 book ai didi

c - 用匿名模块包装 Ruby

转载 作者:行者123 更新时间:2023-11-30 19:45:15 25 4
gpt4 key购买 nike

有多个 Ruby C API 函数可用于运行某些 Ruby 代码。大多数只是在独立的绑定(bind)中运行代码,就像 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);

这样做的意义何在?我已经测试了这些函数以及它们未包装的等效函数,结果总是相同的。有一些我没有看到的用例吗?

最佳答案

我应该做更多测试。看起来这是一个bug .

将代码包装在匿名模块中的目的是不要用代码中定义的常量/方法污染顶级命名空间。 rb_load 正确地进行了此包装,rb_eval_string_wrap 则没有。

关于c - 用匿名模块包装 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26700441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com