2011-09-13 2 views
0

HI я следующий код в C, которая вызывается из рубина сценария,Что такое расширение объекта класса исключения Ruby в c?

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); 
} 

Ниже приводится код клиентского скрипта рубина,

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() 

Я призываю MyMethod функции() из рубинового клиента. Может ли кто-нибудь сказать мне, как получить доступ к объекту класса исключений «exc» в c-файле и всем его атрибутам.

+0

Имена модулей должны начинаться с заглавной буквы. –

ответ

1

Используйте метод rb_funcall, чтобы вызвать методы на вашем объекте 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") 
) 
Смежные вопросы