我使用 Ruby 的 C API 创建了一些类。我想创建一个函数,其行为会根据 Ruby 对象的类而改变。
我尝试使用 Ruby 中的 is_a?
,但是,我认为这不是执行此操作的好方法。我检查了“Creating Extension Libraries for Ruby”但没有成功。检查类的唯一直接方法是使用默认类型。
我已经创建了我的类“Klass”:
VALUE rb_cKlass = rb_define_class("Klass", rb_cObject);
以及我想如何检查类(class)是否合适:
VALUE my_function(VALUE self, VALUE my_argument) {
if(rb_check_class(my_argument), rb_cKlass)) {
// do something if my_argument is an instance of Klass
} else {
return Qnil;
}
}
有办法吗?
我最近遇到了这个,并使用了 RBASIC_CLASS
宏,但由于某些无法解释的原因在某些情况下出现段错误。
扫描完ruby.h
, 我找到了 CLASS_OF
宏,它将类返回为 VALUE
给定对象的。
VALUE obj = INT2NUM(10);
VALUE klass = CLASS_OF(obj); // rb_cInteger
使用 ruby 2.5
我是一名优秀的程序员,十分优秀!