reliable way of finding Objects Class?

Discussion in 'Ruby' started by walter@mwsewall.com, Jul 17, 2003.

  1. Guest

    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 :
    259 Front St. Phone : (207) 442-7994 x 128
    Bath, ME 04530 Fax : (207) 443-6284
    *****************************************************
    , Jul 17, 2003
    #1
    1. Advertising

  2. Hi,

    In message "reliable way of finding Objects Class?"
    on 03/07/17, <> writes:
    |
    |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.
    Yukihiro Matsumoto, Jul 17, 2003
    #2
    1. Advertising

  3. On Thu, Jul 17, 2003 at 11:08:00PM +0900, wrote:
    > 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

    > => #<Obj:0x401e98c8>
    > >> 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.
    Brian Candler, Jul 17, 2003
    #3
  4. Guest

    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 --
    >
    > On Thu, 17 Jul 2003 wrote:
    >
    > > 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

    > => #<Obj:0x401e98c8>
    > >> 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:
    > work:
    > Web: http://pirate.shu.edu/~blackdav
    >
    >



    *****************************************************
    Walter Szewelanczyk
    IS Director
    M.W. Sewall & CO. email :
    259 Front St. Phone : (207) 442-7994 x 128
    Bath, ME 04530 Fax : (207) 443-6284
    *****************************************************
    , Jul 17, 2003
    #4
    1. Advertising

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

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Vaughn
    Replies:
    8
    Views:
    743
    Peter O'Reilly
    Apr 19, 2004
  2. 7stud
    Replies:
    11
    Views:
    662
    Dennis Lee Bieber
    Mar 20, 2007
  3. Sudarshan Narasimhan

    Need a reliable way for faster lookup.

    Sudarshan Narasimhan, Oct 7, 2009, in forum: C++
    Replies:
    6
    Views:
    373
    Michael Doubez
    Oct 8, 2009
  4. novus
    Replies:
    9
    Views:
    222
    last component
    Dec 14, 2005
  5. Andrew Poulos

    reliable way to get element by name

    Andrew Poulos, Aug 5, 2006, in forum: Javascript
    Replies:
    1
    Views:
    77
    Martin Honnen
    Aug 5, 2006
Loading...

Share This Page