[bcn-pm] fer còpia d'un objecte

Anarion anarion at manresa.net
Fri Jul 18 03:55:19 CDT 2003


A Divendres 18 Juliol 2003 04:19, Alex Muntada va escriure:
> Per enviar email a la llista:
> barcelona-pm at pm.org
> http://mail.pm.org/mailman/listinfo/barcelona-pm
>
> Quoting Anarion:
> > La disponibilitat de clonar un objecte a destar implementada
> > a la clase que utilitzes.
>
> No soc cap expert en Bioperl, però fent un cop d'ull al manual
> diria que el que tu busques és el següent:
>
>   $a = new Bio::SeqFeature::Generic();
>
>   $b = new Bio::SeqFeature::Generic(
>     -gff_string => $a->gff_string
>   );
>
Jo ni tan sols m'havia mirat la documentacio del modul, pero mextranyava que 
no tingues un metode per clonar.
Tal com dius tu, es facil clonar un objecte segons la documentacio, tot i que 
l'objecte te algunes diferencies no se ben be perque, segurament per algun 
error alhora de clonarlo:

use Bio::SeqFeature::Generic;
use Data::Dumper;
my $c = Bio::SeqFeature::Generic->new(  -start => 10,
                                        -end => 100,
                                        -strand => -1,
                                        -primary => 'repeat',
                                        -source_tag => 'repeatmasker',
                                        -score  => 1000,
                                        -tag    => {
                                        new => 1,
                                        author => 'someone',
                                        sillytag => 'this is silly!' } );

my $d = Bio::SeqFeature::Generic->new( -gff_string => $c->gff_string );
print Dumper \$d;
print Dumper \$c;

> Però et recomano que miris la web que apareix a la documentació
> (bio.perl.org) perquè hi trobaràs de tot... jo he quedat ben
> parat!
>
> > Sino sempre pots fer algun truc com usar Data::Dumper i eval
> > i ferte un clonatge manual.
>
> Tractant-se de programació amb objectes, haver d'utilitzar el
> Data::Dumper fa molt lleig, encara que funcioni. Per tant, us
> desaconsello totalment aquest mètode en casos com aquest, o ja
> em direu per a què serveix l'OOP sinó...
> ;-)
El metode que li he dit jo, es una manera general de clonar un objecte per a 
gairebe totes les clases, un hack per poder fer el que no es podia fer un cop 
mirada la documentacio suposant que se l'hagues mirada. Per trencar 
lencapsulacio sa de tenir un bon mutiu, no el no llegirse la documentacio, 
pero com el perl no es java, a vegades hi han bons mutius per feru encara que 
aquest no sigui el cas.

Jo desaconsello usar el "indirect object notation" en cualsevol cas aixi com 
utilitzar les variables $a i $b ni que sigui en un exemple.

PD: Es mes rapid usar eval i Dumper que no la propia clase en aquest cas.
-- 

$anarion=\$anarion;

s==q^QBY_^=,$_^=$[x7,print





More information about the Barcelona-pm mailing list