[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Re: Cloning into an object

Eric Mahurin

5/1/2005 3:17:00 AM

--- Robert Klemme <bob.news@gmx.net> wrote:
>
> "George Ogata" <g_ogata@optushome.com.au> schrieb im
> Newsbeitrag
> news:87zmvfx6u9.fsf@optushome.com.au...
> > Eric Mahurin <eric_mahurin@yahoo.com> 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...


2 Answers

dblack

5/1/2005 3:23:00 AM

0

nobu.nokada

5/1/2005 3:27:00 AM

0

Hi,

At Sun, 1 May 2005 12:17:03 +0900,
Eric Mahurin wrote in [ruby-talk:140630]:
> Anybody know when/if become will be made standard?

When: time_t wrap arounds (where sizeof(time_t) == 8), perhaps.
If: Matz.become(Evil) executed successfully.

--
Nobu Nakada