[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

Simple copy of attributes

Vincent Fourmond

12/18/2006 9:23:00 PM


Hello !

I've just stumbled upon code where you have different classes with no
relations, and that you want to copy some attributes from one to the
other. So I came up with this:

def copy_attributes(dest, src, *attrs)
for attr in attrs
dest.send(attr.to_s + '=',src.send(attr))
end
end

Then, if you want, say, to copy the attributes foo, bar and baz (to
reach summits in originality) from biniou to bidule you just need:

copy_attributes(bidule, biniou, :foo, :bar, :baz)

Is there already a function from standard libs doing something similar ?

I know that some of you will answer that coming to such a need means I
should probably refactor my code. Well, as in my case I need to copy
similar members from quite different Struct, I would say no ;-)... (and
it's a 100-lines script, not a big project !).

Cheers !

Vince

--
Vincent Fourmond, PhD student
http://vincent.fourmon...

5 Answers

Paul Lutus

12/18/2006 9:28:00 PM

0

Vincent Fourmond wrote:

>
> Hello !
>
> I've just stumbled upon code where you have different classes with no
> relations, and that you want to copy some attributes from one to the
> other. So I came up with this:
>
> def copy_attributes(dest, src, *attrs)
> for attr in attrs
> dest.send(attr.to_s + '=',src.send(attr))
> end
> end
>
> Then, if you want, say, to copy the attributes foo, bar and baz (to
> reach summits in originality) from biniou to bidule you just need:
>
> copy_attributes(bidule, biniou, :foo, :bar, :baz)
>
> Is there already a function from standard libs doing something similar ?
>
> I know that some of you will answer that coming to such a need means I
> should probably refactor my code. Well, as in my case I need to copy
> similar members from quite different Struct, I would say no ;-)... (and
> it's a 100-lines script, not a big project !).

My personal view is that you should create a class responsible for data
handling and processing, and include methods capable of cloning some or all
of the data members of one instance of the class to another. That way, you
will have encapsulated the specifics of the data copying or processing
within the class.

Just my personal impression, based on how you are proceeding.

--
Paul Lutus
http://www.ara...

Vincent Fourmond

12/18/2006 10:00:00 PM

0

Paul Lutus wrote:
> My personal view is that you should create a class responsible for data
> handling and processing, and include methods capable of cloning some or all
> of the data members of one instance of the class to another. That way, you
> will have encapsulated the specifics of the data copying or processing
> within the class.

I agree that that would be the Ruby OO way. But, let's face it, for
small scripts, a script-like procedural approach is much faster and
easier to develop. For one, I discovered I would use another class just
about when I reached the line where it became necessary...

Vince

--
Vincent Fourmond, PhD student
http://vincent.fourmon...

Paul Lutus

12/18/2006 11:05:00 PM

0

Vincent Fourmond wrote:

> Paul Lutus wrote:
>> My personal view is that you should create a class responsible for data
>> handling and processing, and include methods capable of cloning some or
>> all of the data members of one instance of the class to another. That
>> way, you will have encapsulated the specifics of the data copying or
>> processing within the class.
>
> I agree that that would be the Ruby OO way. But, let's face it, for
> small scripts, a script-like procedural approach is much faster and
> easier to develop. For one, I discovered I would use another class just
> about when I reached the line where it became necessary...

In your first post, you show an example of a copy from one class instance to
another (or so it appears). That's why I suggested formalizing the process
of copying within the class.

It seems a class already exists, and you are copying select values from one
instance to another. It just seemed a better approach to do this copying
activity formally within the class itself.

--
Paul Lutus
http://www.ara...

Trans

12/19/2006 4:29:00 PM

0


Vincent Fourmond wrote:
> Hello !
>
> I've just stumbled upon code where you have different classes with no
> relations, and that you want to copy some attributes from one to the
> other. So I came up with this:
>
> def copy_attributes(dest, src, *attrs)
> for attr in attrs
> dest.send(attr.to_s + '=',src.send(attr))
> end
> end
>
> Then, if you want, say, to copy the attributes foo, bar and baz (to
> reach summits in originality) from biniou to bidule you just need:
>
> copy_attributes(bidule, biniou, :foo, :bar, :baz)
>
> Is there already a function from standard libs doing something similar ?
>
> I know that some of you will answer that coming to such a need means I
> should probably refactor my code. Well, as in my case I need to copy
> similar members from quite different Struct, I would say no ;-)... (and
> it's a 100-lines script, not a big project !).

Facets has Kernel#set_from:

bidule.set_from(biniou, :foo, :bar, :baz)

hth,
t.


Vincent Fourmond

12/19/2006 5:36:00 PM

0

Trans wrote:
> Facets has Kernel#set_from:
>
> bidule.set_from(biniou, :foo, :bar, :baz)

Yes, I knew it must have existed ! Thanks,

Vince
--
Vincent Fourmond, PhD student
http://vincent.fourmon...