Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/20.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(实际上是swift)应用程序中完全重新初始化嵌入式ruby VM?_Ruby_Swift_Ruby C Extension_Embedded Ruby_Mri - Fatal编程技术网

如何在C(实际上是swift)应用程序中完全重新初始化嵌入式ruby VM?

如何在C(实际上是swift)应用程序中完全重新初始化嵌入式ruby VM?,ruby,swift,ruby-c-extension,embedded-ruby,mri,Ruby,Swift,Ruby C Extension,Embedded Ruby,Mri,我使用C Ruby接口在swift应用程序中嵌入Ruby解释器(不过,我使用swift与此无关) 我觉得Ruby一定有办法完全重新初始化自己 我正在初始化vm,如下所示: var variable_in_this_stack_frame:UnsafeMutablePointer<VALUE>? = nil ruby_init_stack(variable_in_this_stack_frame) ruby_init() ruby_init_loadpath() rb_req

我使用C Ruby接口在swift应用程序中嵌入Ruby解释器(不过,我使用swift与此无关)

我觉得Ruby一定有办法完全重新初始化自己

我正在初始化vm,如下所示:

 var variable_in_this_stack_frame:UnsafeMutablePointer<VALUE>? = nil
 ruby_init_stack(variable_in_this_stack_frame)
 ruby_init()
 ruby_init_loadpath()
 rb_require("enc/encdb")
 rb_require("enc/trans/transdb")
 var node = ruby_options(Int32(options.count), &cargs)
    var state: Int32 = 0
    ruby_cleanup(state)
然后像这样销毁虚拟机:

 var variable_in_this_stack_frame:UnsafeMutablePointer<VALUE>? = nil
 ruby_init_stack(variable_in_this_stack_frame)
 ruby_init()
 ruby_init_loadpath()
 rb_require("enc/encdb")
 rb_require("enc/trans/transdb")
 var node = ruby_options(Int32(options.count), &cargs)
    var state: Int32 = 0
    ruby_cleanup(state)
然而,第二次执行所有这些操作时,我在运行时获得了
EXC\u BAD\u访问权限
ruby\u init\u loadpath()


我该怎么控制它

关闭Ruby的VM后不可能重新初始化它,因为
Ruby_cleanup
Ruby_finalize
不会将其返回到可重用的原始状态,并且只用于以优雅的方式关闭它


唯一的实际选择是生成一个新流程,根据您的实现,这个流程可能不太理想。我不能100%确定在不同的线程上再次尝试是否可行,尽管我认为这不太可能,因为Ruby VM是单线程的。

关闭Ruby VM后,不可能重新初始化它,由于
ruby_cleanup
ruby_finalize
不会将其返回到可重用的原始状态,并且只用于以优雅的方式关闭它

唯一的实际选择是生成一个新流程,根据您的实现,这个流程可能不太理想。我不能100%确定在不同的线程上再次尝试是否是可行的选择,尽管我认为这不太可能,因为Ruby VM是单线程的