2015-11-06 43 views
-2

在我的應用程序中,我做了一個檢查:object.class == Array。我碰到這裏發佈關於.is_a?.kind_of?.instance_of?在ruby中object.class ==和object.is_a有什麼區別?

之間的區別來了。由於我想.is_a?讀取比.class ==,我改變了它,才發現一個是真實的,但其他沒有。注意:這是在閱讀XML提要的情況下。這是因爲存在將XML隱式轉換爲數組的問題?

+3

'is_a?'也會匹配父類。 –

+1

我認爲通過閱讀文檔可以清楚地理解這個問題。 ['Object#is_a?'](http://ruby-doc.org/core-2.2.3/Object.html#method-i-is_a-3F)和['Module#=='](http:/ /ruby-doc.org/core-2.2.0/Module.html#method-i-3D-3D) – engineersmnky

+0

我明白繼承.is_a?對於子類也是如此。但在這種情況下,「object.class == Array」爲true,但「object.is_a?Array」爲false - 這沒有意義。 –

回答

0

在繼承方面至少有一處不同。這裏有一個例子:

class A;end 
class B < A;end 
b = B.new 

b.is_a? A # => true 
b.is_a? B # => true 

b.class == A # => false 
b.class == B # => true 

b.instance_of? A # => false 
b.instance_of? B # => true 
+0

我明白,因爲B子類A,b.class!= A.但是,在我的情況下,對象(一個XML對象).class ==數組的計算結果爲true,但object.is_a?數組的計算結果爲false。 –