как проанализировать этот фрагмент исходного кода Ruby о методе === - PullRequest
0 голосов
/ 01 июля 2011

Я нашел пример и метафору Object#=== operatorare слишком запутанными, теперь я начинаю читать исходный код, но я новичок в C, любой может сказать мне, как анализировать этот код:

VALUE
rb_equal(VALUE obj1, VALUE obj2)
{
    VALUE result;

    if (obj1 == obj2) return Qtrue;
    result = rb_funcall(obj1, id_eq, 1, obj2);
    if (RTEST(result)) return Qtrue;
    return Qfalse;
}

1 Ответ

1 голос
/ 01 июля 2011

VALUE - это универсальный тип объектов Ruby в C (в отличие от типов C, таких как int). Из этого вы можете сделать вывод, что rb_equal - это функция, сравнивающая два объекта Ruby (obj1 и obj2). Если два объекта равны Qtrue (повторение истинного значения Ruby в C) будет возвращено. Если нет, rb_funcall вызовет метод равенства (id_eq) для obj1. Если результат верен (проверено с помощью RTEST(result)), будет возвращено Qtrue. Если мы дойдем до конца функции, очевидно, что 2 объекта не совпадают, поэтому мы вернем false (Qfalse).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...