c 中 ruby​​ Exception 类对象的扩展是什么?

发布于 2024-12-04 05:26:45 字数 752 浏览 1 评论 0原文

您好,我在 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文件中的异常类对象“exc”及其所有属性。

HI i have following code in c which is invoked from a ruby script,

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

Following is the code of ruby client script,

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

I invoke myMethod() function from ruby client. Can any one tell me how to access Exception class object "exc" in c file and its all attributes.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

一张白纸 2024-12-11 05:26:45

使用 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")
)

Use rb_funcall to call methods on your exc object.

Assuming the exc had a #description method:

VALUE myVar;
myVar = rb_funcall( exc, rb_intern("description"), 0)

Of if you need to specify arguments:

VALUE myVar;
myVar = rb_funcall( exc, rb_intern("foobar"), 3,
  rb_float_new( 2.5 ),
  INT2FIX( 123 ),
  rb_str_new2("Hello World")
)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文