在我的應用程序中,我做了一個檢查:object.class == Array
。我碰到這裏發佈關於.is_a?
和.kind_of?
和.instance_of?
在ruby中object.class ==和object.is_a有什麼區別?
之間的區別來了。由於我想.is_a?
讀取比.class ==
,我改變了它,才發現一個是真實的,但其他沒有。注意:這是在閱讀XML提要的情況下。這是因爲存在將XML隱式轉換爲數組的問題?
在我的應用程序中,我做了一個檢查:object.class == Array
。我碰到這裏發佈關於.is_a?
和.kind_of?
和.instance_of?
在ruby中object.class ==和object.is_a有什麼區別?
之間的區別來了。由於我想.is_a?
讀取比.class ==
,我改變了它,才發現一個是真實的,但其他沒有。注意:這是在閱讀XML提要的情況下。這是因爲存在將XML隱式轉換爲數組的問題?
在繼承方面至少有一處不同。這裏有一個例子:
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
我明白,因爲B子類A,b.class!= A.但是,在我的情況下,對象(一個XML對象).class ==數組的計算結果爲true,但object.is_a?數組的計算結果爲false。 –
'is_a?'也會匹配父類。 –
我認爲通過閱讀文檔可以清楚地理解這個問題。 ['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
我明白繼承.is_a?對於子類也是如此。但在這種情況下,「object.class == Array」爲true,但「object.is_a?Array」爲false - 這沒有意義。 –