在macruby中,模块的方法“__type__”是什么?做?

发布于 2024-12-03 02:43:30 字数 109 浏览 0 评论 0原文

macruby 中的 Module 有许多通常没有的方法。其中之一是 __type__ ,我似乎无法弄清楚它的作用。它有什么作用?

谢谢!

z。

Module in macruby has many methods that it doesn't usually have. One of these is __type__ and I simply can't seem to figure out what it does. What does it do?

Thanks!

z.

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

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

发布评论

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

评论(1

赏烟花じ飞满天 2024-12-10 02:43:30

__type__ 在 object.c 中定义为:

static VALUE
rb_obj_type(VALUE obj)
{
    return LONG2FIX(TYPE(obj));
}

它又依赖于 rb_type 函数:

static inline int
rb_type(VALUE obj)
{
    if (IMMEDIATE_P(obj)) {
    if (FIXNUM_P(obj)) {
        return T_FIXNUM;
    }
    if (FIXFLOAT_P(obj)) {
        return T_FLOAT;
    }
    if (obj == Qtrue) {
        return T_TRUE;
    }
    if (obj == Qundef) {
        return T_UNDEF;
    }
    }
    else if (!RTEST(obj)) {
    if (obj == Qnil) {
        return T_NIL;
    }
    if (obj == Qfalse) {
        return T_FALSE;
    }
    }
    return rb_objc_type(obj);
}

当然,它只是返回一个与类型标识符相对应的数字,如预编译器常量 T_FIXNUM、T_FLOAT 等。

我想说,对于标准用户来说,它的用途确实有限,尽管在编写 C 扩展时,它可能会使您的代码在类型检查方面更加有效。

__type__ is defined in object.c as:

static VALUE
rb_obj_type(VALUE obj)
{
    return LONG2FIX(TYPE(obj));
}

which in turns depends on the rb_type function:

static inline int
rb_type(VALUE obj)
{
    if (IMMEDIATE_P(obj)) {
    if (FIXNUM_P(obj)) {
        return T_FIXNUM;
    }
    if (FIXFLOAT_P(obj)) {
        return T_FLOAT;
    }
    if (obj == Qtrue) {
        return T_TRUE;
    }
    if (obj == Qundef) {
        return T_UNDEF;
    }
    }
    else if (!RTEST(obj)) {
    if (obj == Qnil) {
        return T_NIL;
    }
    if (obj == Qfalse) {
        return T_FALSE;
    }
    }
    return rb_objc_type(obj);
}

Definitely, it simply returns a number that corresponds to a type identifier, as defined by the pre compiler constants T_FIXNUM, T_FLOAT, etc.

I would say that it is something of really limited use for standard users, although it may make your code more efficient in type checking when you write C extensions.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文