Ruby kind_of?和is_a?为子类返回false

时间:2011-07-20 21:31:26

标签: ruby-on-rails-3

我正在尝试利用ruby方法kind_of?is_a?。据我了解,它们是彼此的同义词。

我有一个班级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}}

1 个答案:

答案 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和包含的模块,但上面打印出“IS A PARENT”给我。 osx上的Ruby 1.8.7。