Finding the super class of an object?

A

Aaron Smith

How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class ('Hash').... is_a? won't work as that requires an actual
module or class.. I need a string representation.

any ideas? thanks..
 
D

dblack

Hi --

How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class ('Hash').... is_a? won't work as that requires an actual
module or class..

is_a? won't report an inheritance relationship in any case:

class D < C; end
D.is_a?(C) # false (unless C is Object maybe....)
I need a string representation.

any ideas? thanks..

superclass.name will give it to you as a string.


David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)
 
J

Justin Collins

Aaron said:
How can I find out what the super class is of an object, Say if a class
extends Hash. I need to be able to find a string representation of the
super class ('Hash').... is_a? won't work as that requires an actual
module or class.. I need a string representation.

any ideas? thanks.

Will Module#ancestors work?

irb(main):001:0> class A
irb(main):002:1> end
=> nil
irb(main):003:0> class B < A
irb(main):004:1> end
=> nil
irb(main):005:0> A.ancestors
=> [A, Object, Kernel]
irb(main):006:0> B.ancestors
=> [B, A, Object, Kernel]


-Justin
 
B

Bruce Woodward

irb(main):013:0> a=10
=> 10
irb(main):014:0> a.class.ancestors
=> [Fixnum, Integer, Precision, Numeric, Comparable, Object, Kernel]
irb(main):015:0> a.class.superclass.name
=> "Integer"
irb(main):016:0>
 
D

dblack

Hi --

yes, is_a? does report inheritance. consider this...

class C
end

class D < C
end

t = D.new

puts t.is_a?(C)

I interpreted your question as meaning that, given a class, you wanted
a string representation of its superclass -- and my point was that
is_a? isn't relevant in that situation, because D.is_a?(C) is false.
(It's actually not relevant anyway, since it's a boolean query; it
returns true or false, which isn't what you're looking for.)

If you want to go from any object to its class's superclass in string
form, you would do:

obj.class.superclass.name


David

--
Q. What is THE Ruby book for Rails developers?
A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black)
(See what readers are saying! http://www.rubypal.com/r4rrevs.pdf)
Q. Where can I get Ruby/Rails on-site training, consulting, coaching?
A. Ruby Power and Light, LLC (http://www.rubypal.com)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
474,222
Messages
2,571,141
Members
47,756
Latest member
JulienneY0

Latest Threads

Top