From: Eric Mahurin Date: 2005-05-01T12:17:03+09:00 Subject: Re: Cloning into an object --- Robert Klemme wrote: > > "George Ogata" schrieb im > Newsbeitrag > news:87zmvfx6u9.fsf@optushome.com.au... > > Eric Mahurin writes: > > > >> Anybody know how to generically copy (shallow like clone) > an > >> object into another object? It would be nice to handle > the > >> case where the objects have a different class, but I would > at > >> least like to know how to do it when the classes are the > same. > >> > >> Here is an example of what I would like to do: > >> > >> dest = Object.new # or String.new if necessary > >> source = "hello world" > >> destid = dest.id > >> > >> source.clone_into(dest) > >> > >> dest -> "hello world" > >> dest.id==destid -> true > >> dest.class -> String > > > > I hear that evil.rb has Object#become, which will do that > with some > > caveats. Search "Object#become" in the list archives for > more info. > > If you just want to copy state you can do without evil magic > (although not > working for builtins like String, Array, Fixnum etc.): > > class Object > def set_from(o) > o.instance_variables.each do |var| > instance_variable_set( var, o.instance_variable_get( > var ) ) > end > self > end > end Thanks for the pointers. I downloaded evil.rb and tried "become" (used dest.become(source) for the copy) and it did exactly what I wanted. I read a little more about become. It looks like it might be made standard in ruby at some point. Will it have the above functionality. Or will it do something like what I think the smalltalk "become" does - change all references to the destination object to point to the source object. I really don't want the reference changes because a) it seems very expensive (search the object space), and b) this would cause the object id to change. Anybody know when/if become will be made standard? __________________________________________________ Do You Yahoo!? Tired of spam? Yahoo! Mail has the best spam protection around http://mail.yahoo.com