2011-07-20 6 views
1

私はrubyメソッド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)が明らかにそうであるように真を返すと考えることが考えられる理由を理解できないようです。

これらのクラスは、最終的に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

'クラスの親

答えて

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

関連する問題