[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Cloning into an object

Eric Mahurin

4/30/2005 9:46:00 PM

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



__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail...


3 Answers

George Ogata

4/30/2005 10:03:00 PM

0

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.



Robert Klemme

4/30/2005 10:52:00 PM

0


"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

Kind regards

robert

acharlieblue

5/1/2005 2:57:00 AM

0


Eric Mahurin wrote:
> 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

Is the only difference between this and Object#clone that the object_id
is the same as the old object's? Because that's all I can see here, but
I don't understand why that would come in handy.