2011-07-01 29 views
0

我發現這個例子和隱喻的操作太困惑了,我現在開始閱讀源代碼,但是我是C新手,任何人都可以告訴我這個分析如何代碼:如何分析這段關於===方法的Ruby源代碼片段

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; 
} 
+2

你能告訴我們哪部分代碼會讓你感到困惑嗎?如果它是「if(obj1 == obj2)return Qtrue;」它只是意味着:「如果obj1與obj2相同,那麼此函數必須返回」true「布爾值」 –

回答

1

VALUE是通用型的Ruby的C對象(而不是到C類型,如int)。由此可以推斷出rb_equal是比較兩個Ruby對象(obj1obj2)的函數。如果兩個對象相等,則Qtrue(C中的Ruby的真實覆蓋率)將返回。如果不是rb_funcall將調用obj1上的等式方法(id_eq)。如果結果是truthy(使用RTEST(result)進行檢查)將返回Qtrue。如果我們觸及函數的結尾,2個對象顯然不一樣,所以我們將返回false(Qfalse)。

+0

感謝您解釋c代碼 – mko