c - 如何在 Ruby C API 中获取 VALUE 的类

标签 c ruby api

我使用 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

关于c - 如何在 Ruby C API 中获取 VALUE 的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44027037/

相关文章:

c - 关于返回字符串的结构和函数指针,我有这个问题需要解决

C char数组不是字符串模式?

json - 使用 httparty ruby​​gem 发出 api 请求时如何处理分页

java - 无法从 Azure api 管理中的开发人员门户访问新的 api 服务

django - Google OAUTH 给出 502 错误

javascript - Foursquare Places API for Venue Search axios 和浏览器响应的区别

c - 无法使用指向结构的指针更改结构字段

C 编译器错误 : conflicting types, 整数到指针的转换不兼容

ruby-on-rails - 无法访问 RSpec 测试中的变量

ruby - 更改 JSON 对象的特定值