Ruby:我们如何识别对象o是否在类层次结构中将C类作为其祖先?

arr*_*rac 3 ruby class-hierarchy

在Ruby中,是否可以使用任何方法识别对象o在类层次结构中是否具有类C作为其祖先?

我在下面给出了一个例子,我用一种假设的方法has_super_class?来完成它.我该怎么做呢?

o = Array.new
o[0] = 0.5
o[1] = 1
o[2] = "This is good"
o[3] = Hash.new

o.each do |value|
  if (value.has_super_class? Numeric)
    puts "Number"
  elsif (value.has_super_class? String)
    puts "String"
  else
    puts "Useless"
  end
end
Run Code Online (Sandbox Code Playgroud)

预期产出:

Number
Number
String
Useless
Run Code Online (Sandbox Code Playgroud)

fif*_*uri 8

试试obj.kind_of?(Klassname):

1.kind_of?(Fixnum) => true
1.kind_of?(Numeric) => true
....
1.kind_of?(Kernel) => true
Run Code Online (Sandbox Code Playgroud)

kind_of?方法也有相同的替代方案is_a?.

如果只想检查对象是否是类的(直接)实例,请使用obj.instance_of?:

1.instance_of?(Fixnum) => true
1.instance_of?(Numeric) => false
....
1.instance_of?(Kernel) => false
Run Code Online (Sandbox Code Playgroud)

您还可以通过调用对象的ancestors方法列出对象的所有祖先class.比如1.class.ancestors给你[Fixnum, Integer, Precision, Numeric, Comparable, Object, PP::ObjectMixin, Kernel].