2011-07-20 66 views
1

我試圖利用紅寶石方法kind_of?is_a?。據我所知,它們是彼此的同義詞。Ruby kind_of?和is_a?返回false爲子類

我有一個類Child的對象。撥打Child.ancestors的電話會返回一個數組列表[Child, #<Module>, Parent, ...]。但是,致電Child.new.is_a?(Parent)Child.new.kind_of?(Parent)會返回false。

調用Child.ancestors[2].new.is_a?(Parent)也返回false。我似乎無法弄清楚爲什麼這會考慮呼叫Parent.new.is_a?(Parent)返回true,因爲它顯然應該。

這些類最終都會從ActiveResource::Base下降,如果這與它有任何關係。

class Parent < ActiveRecord::Base 
    include MyModule 
    def self.my_method(obj) 
    if obj.is_a?(Parent) 
     puts 'Hello' 
    end 
    end 
end 

class Child < Parent 
    def my_method 
    self.class.my_method(self) 
    end 
end 

a = Child.new 
a.my_method 
+1

你可以發佈你的類定義嗎? – Gazler

+0

'類父<的ActiveRecord :: Base的 包括MyModule的 高清self.my_method(OBJ) 如果obj.is_a?(家長) 放 '你好' 結束 結束 結束 類兒童<父 高清my_method self.class.my_method(self) end end a = Child.new a.my_method' –

回答

0
class Parent 
    def self.my_method(obj) 
    if obj.is_a?(Parent) 
     puts 'IS A PARENT' 
    else 
     puts 'IS NOT A PARENT' 
    end 
    end 
end 

class Child < Parent 
    def my_method 
    self.class.my_method(self) 
    end 
end 

a = Child.new 
a.my_method 

注意我放棄了AR和包括模塊,但是上面打印出「是父」對我來說。在osx上的Ruby 1.8.7。