Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 用匿名模块包装Ruby_C_Ruby_Ruby C Extension - Fatal编程技术网

C 用匿名模块包装Ruby

C 用匿名模块包装Ruby,c,ruby,ruby-c-extension,C,Ruby,Ruby C Extension,有几个Ruby C API函数用于运行一些Ruby代码。大多数只是在一个独立的绑定中运行代码,比如requiredoes。但其中一些在运行之前先将代码包装在匿名模块中。例如,rb\u load使用一个参数来确定您是否需要此包装,rb\u eval\u string\u wrap只是rb\u eval\u string\u protect但需要包装 在C中,包装如下所示: /* load in anonymous module as toplevel */ th->top_self = rb

有几个Ruby C API函数用于运行一些Ruby代码。大多数只是在一个独立的绑定中运行代码,比如
require
does。但其中一些在运行之前先将代码包装在匿名模块中。例如,
rb\u load
使用一个参数来确定您是否需要此包装,
rb\u eval\u string\u wrap
只是
rb\u eval\u string\u 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);

这样做有什么意义?我已经测试了这些函数以及它们的未包装等价物,结果总是一样的。是否有一些用例我没有看到?

我应该做更多的测试。看起来这是一个很好的例子


在匿名模块中包装代码的要点是不要用代码中定义的常量/方法污染顶级命名空间
rb\u load
是否正确包装,rb\u eval\u string\u wrap是否正确包装。

嘿,感谢一年后的随机否决投票,没有任何评论。