我在 Rubysource 中寻找时间,我正在尝试用 C++ 扩展 Ruby。我的问题是,因为很难在 Rubycode 中找到一些东西:如何从内存而不是文件中解释 ruby-code。我的意思是,我想从内存中解释我自己的加密 ruby 代码。我当前用于解释 ruby 文件的代码如下所示:
bool Ruby::rb_load_file(char* szFilename)
{
::ruby_script(szFilename);
int ret = 0;
VALUE value;
rb_protect((VALUE(*)(VALUE))rb_require, (VALUE)szFilename, &ret);
value = ::rb_gv_get("$!");
value = ::rb_funcall(value, rb_intern("to_s"), 0);
if (rb_string_value_cstr(&value)[0] != '\0')
{
::rb_eval_string_protect("puts $!, $@", &ret);
return false;
}
return true;
}
但我不想从我的硬盘加载我的 ruby 文件,而是从我的记忆中加载(遵守 utf-8 编码,因此 rb_eval_string 将不起作用)。一种更好的思考方法:我想将我的 ruby 代码解释为 c 字符串,并遵守 utf-8 编码 inclusive bom。