gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 01:20:36 26 4
gpt4 key购买 nike

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

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com