From: Mathieu Bouchard Date: 2003-08-04T02:39:15+09:00 Subject: Re: Extracting a parent class On Fri, 1 Aug 2003, Michael Garriss wrote: > Sorry about the newbie question but.... > class A; attr_accessor :a end > class B < A; attr_accessor :b end > b = B.new > b.a = "some data" > b.b = "some more data" > a = b.????? > How do I set 'a' from 'b' so that a is of class A and not class B? I > don't want the extra info, I want just the subset of members found in > the parent class. Is there a way to cast? Like most other OO languages, the class of an object is a property of the object [1] and not of the pointer [2] or of the variable that holds the pointer [3]. C++ is the only language I know that allows to see an object thru the lens of its parent classes, but that's usually considered as a consequence of other things in C++, not so much a feature by itself. In Ruby, variables don't have classes at all. If you want variable 'a' to point to an object of class A (such that a.class==A), you have to do: a = A.new a.a = b.a but then 'a' points to a different object than 'b', not a subpart. (However the string object "some data" is shared between the two.) If you want to make copying automatic, it is possible to get a list of all existing accessors for an object like this: class A attr_accessor :a,:b,:c def self.get_accessor_list list=[] instance_methods(true).each {|m| list<<$1 if /(\w+)=$/ =~ m.to_s } list end end A.get_accessor_list #==> ["b", "a", "c"] ... and then you can use that to automatically find out what to copy from one object to another; but maybe copying isn't necessarily what you want, I don't know. ________________________________________________________________ Mathieu Bouchard http://artengine.ca/matju