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)
试试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].
| 归档时间: |
|
| 查看次数: |
1251 次 |
| 最近记录: |