reliable way of finding Objects Class?

W

walter

Hi,

is there a reliable way to find the Object's Class. I know about
class and type, but what happens if they are overridden?

how do you find it then?

for instance how to find the class at runtime for the following :

class Obj
def class
"Not My Class"
end

def type
"don't look here for it"
end
end

I am sure it is very simple, I just can't seem to find it.


Any hints would be greatly appreciated.


Thanks,

Walt
*****************************************************
Walter Szewelanczyk
IS Director
M.W. Sewall & CO. email : (e-mail address removed)
259 Front St. Phone : (207) 442-7994 x 128
Bath, ME 04530 Fax : (207) 443-6284
*****************************************************
 
Y

Yukihiro Matsumoto

Hi,

In message "reliable way of finding Objects Class?"
|
|is there a reliable way to find the Object's Class. I know about
|class and type, but what happens if they are overridden?

This is not perfect but working way:

c = Object.instance_method:)class)
class Foo
def class
nil
end
end
f = Foo.new
p f.class # => nil
p c.bind(f).call # => Foo
matz.
 
B

Brian Candler

As for finding an object's class without Object#class, I guess you
could do something like:
class Obj; def class; "Go away!"; end; end => nil
o = Obj.new
=> # said:
a = []; ObjectSpace.each_object(Class) {|c| a << c if o.is_a?(c)} => 346
a[-1]
=> Obj

"is_a?" matches superclasses as well - "instance_of?" would be better here I
think.

But like David says, if you shoot off all your feet, you won't have anything
left to stand on :)

Cheers,

Brian.
 
W

walter

My problem is in a Persistence Framework that I have, and with
dynamically generated classes from a database schema ( and in a
separate but similar issue with dynamically created classes from a
resultSet).

I need to find the objects class to get the correct database mapping,
but the objects are (in this case) dynamically created from a
database schema, and several of those overide class.

I was hoping to be able to find an objects class from a different
object, perhaps Class. Something like Class.class(obj), that way I
would not have to worry about naming clashes.

The ObjectSpace would work, but I am worried about performance.


Thanks,


Walt
Hello --

Hi,

is there a reliable way to find the Object's Class. I know about
class and type, but what happens if they are overridden?

how do you find it then?

for instance how to find the class at runtime for the following :

class Obj
def class
"Not My Class"
end

def type
"don't look here for it"
end
end

Note that Object#type is on the way out:

$ ruby -ve '1.type'
ruby 1.8.0 (2003-06-23) [i686-linux]
-e:1: warning: Object#type is deprecated; use Object#class

As for finding an object's class without Object#class, I guess you
could do something like:
class Obj; def class; "Go away!"; end; end => nil
o = Obj.new
=> # said:
a = []; ObjectSpace.each_object(Class) {|c| a << c if o.is_a?(c)}
=> 346 >> a[-1] => Obj

But ObjectSpace.each_object can also be overridden. There's a finite
number of ways to get this information, none of which as far as I know
is override-proof.


David

--
David Alan Black
home: (e-mail address removed)
work: (e-mail address removed)
Web: http://pirate.shu.edu/~blackdav


*****************************************************
Walter Szewelanczyk
IS Director
M.W. Sewall & CO. email : (e-mail address removed)
259 Front St. Phone : (207) 442-7994 x 128
Bath, ME 04530 Fax : (207) 443-6284
*****************************************************
 

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

Forum statistics

Threads
473,982
Messages
2,570,190
Members
46,736
Latest member
zacharyharris

Latest Threads

Top