В macruby, что делает метод модуля "__type__"? - PullRequest
0 голосов
/ 02 сентября 2011

Module в macruby есть много методов, которых обычно нет. Одним из них является __type__, и я просто не могу понять, что он делает. Что это делает?

Спасибо!

г.

1 Ответ

1 голос
/ 27 сентября 2011

__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.

...