Forum: Ruby Finding the super class of an object?

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
5e8fd591aeccbffd6fc93c171ac4fa43?d=identicon&s=25 Aaron Smith (warhero)
on 2007-01-16 04:29
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..
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2007-01-16 04:37
(Received via mailing list)
Hi --

On Tue, 16 Jan 2007, Aaron Smith wrote:

> 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
28b37e90e187bd316d7a0a180b004b29?d=identicon&s=25 aaron smith (Guest)
on 2007-01-16 04:43
(Received via mailing list)
yes, is_a? does report inheritance. consider this...

class C
end

class D < C
end

t = D.new

puts t.is_a?(C)

thanks.
28b37e90e187bd316d7a0a180b004b29?d=identicon&s=25 aaron smith (Guest)
on 2007-01-16 04:52
(Received via mailing list)
do you know of anyway to do this on an instance of an object, not on the
class method??

thanks..
F3b7109c91841c7106784d229418f5dd?d=identicon&s=25 Justin Collins (justincollins)
on 2007-01-16 04:54
(Received via mailing list)
Aaron Smith wrote:
> 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
28b37e90e187bd316d7a0a180b004b29?d=identicon&s=25 aaron smith (Guest)
on 2007-01-16 04:55
(Received via mailing list)
nevermind, got it..

t.class.superclass.name
8cfdf47d27893fbd55d6b9565c34fbe4?d=identicon&s=25 Bruce Woodward (Guest)
on 2007-01-16 05:05
(Received via mailing list)
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>
1fba4539b6cafe2e60a2916fa184fc2f?d=identicon&s=25 unknown (Guest)
on 2007-01-16 13:44
(Received via mailing list)
Hi --

On Tue, 16 Jan 2007, aaron smith wrote:

>> > module or class..
>
> 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
This topic is locked and can not be replied to.