我正在尝试利用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}}
答案 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。