我在c中有以下代码,它是从ruby脚本中调用的,
static VALUE myMethod(VALUE self, VALUE exc)
{
int a = TYPE(exc);
printf(" %d ", a );
// Some process on exc
}
void Init_myRuby()
{
VALUE mRuby = rb_define_module("myRuby");
VALUE mException = rb_define_class_under(mRuby, "Exception", rb_eRuntimeError);
rb_define_singleton_method(mRuby, "myMethod", myMethod, 4);
}
以下是ruby客户端脚本的代码,
require 'myRuby'
def raiseExc()
exception = myRuby::Exception.new("status","lasterror","function()","Calling some")
myRuby::myMethod(exception, "Exception message: %s, Exception object %d", "Hi from Exception", 100)
end
raiseExc()
我从ruby客户端调用myMethod()函数。任何人都可以告诉我如何访问c文件中的Exception类对象“exc”及其所有属性。
答案 0 :(得分:1)
使用rb_funcall
调用exc
对象上的方法。
假设exc有一个#description
方法:
VALUE myVar;
myVar = rb_funcall( exc, rb_intern("description"), 0)
如果你需要指定参数:
VALUE myVar;
myVar = rb_funcall( exc, rb_intern("foobar"), 3,
rb_float_new( 2.5 ),
INT2FIX( 123 ),
rb_str_new2("Hello World")
)