我正在尝试在C中编写Ruby扩展,并且在调用传递给扩展的对象的方法时遇到问题。
例如,我有一个ruby类定义如下:
class MyClass
def write(message)
...do a write...
end
end
扩展名定义为:
#include "ruby.h"
static VALUE _init(VALUE self, VALUE logger)
{
switch (TYPE(logger))
{
case T_OBJECT:
ID method = rb_intern("write");
if (rb_respond_to(logger, method))
fputs("logger responds to write\n", stderr);
else
fputs("logger does NOT respond to write\n", stderr);
break;
default:
fputs("logger not an object\n", stderr);
}
return self;
}
void Init_MyExt()
{
VALUE MyExt_class = rb_define_class("MyExt", rb_cObject);
rb_define_method(MyExt_class, "initialize", _init, 1);
}
执行调用的ruby脚本类似于:
require 'MyExt.so'
@log = MyClass.new()
@myext = MyExt(@log)
我得到的回答是:"记录器不响应写"
我确信我在这里遗漏了一些微妙的问题,因为我原本希望记录器能够响应写请求。
在我的脑海里,我觉得这个“值”记录器'参数仅描述指针而不是将logger描述为具有方法的对象。
非常感谢任何见解。谢谢!