kopia objectu

Honza Pazdziora adelton na informatics.muni.cz
Čtvrtek Říjen 16 10:49:01 MEST 2003


On Wed, Oct 15, 2003 at 12:06:48PM +0200, Aben Siatris wrote:
> trosku sa trapim s jednou hlupostou.
> ako mozem spravit copy objektu?

Normalne, vratite novy objekt.

> pokusam sa o to nasledovnou syntaxou
> 
> my $obj1=package::new();
> my $obj2=$obj1->new();
> 
> avsak obj2 sa chova nie ako kopia ale
> ako clone z obj1. akakolvek zmena v obj2

$obj2 se bude chovat tak, jak si naprogramujete new(). Pokud bude ten
konstruktor

sub new {
	my $class = shift;
	if (ref $class) {
		return $class;
	} else {
		return bless { @_ }, $class;
	}
}

tak bude

	$obj2 = $obj1->new();

ekvivalentni

	$obj2 = $obj1;

Pokud bude ten konstruktor

sub new {
	my $class = shift;
	if (ref $class) {
		return bless { $class->content() }, ref $class;
	} else {
		return bless { @_ }, $class;
	}
}

tam bude vracen objekt jako novy anonymni hash, s nejakymi hodnotami,
ktere klidne mohou byt uplne nov, byt budou odvozezene z hodnot
$obj1.

> sa odrazi tiez v obj1 a ja by som chcel
> vytvorit len copy. da sa to vobec???

Da se vsechno. Uplne na zacatku je treba si uvedomit, ze Perl s pojmy
jako copy a clone vubec nepracuje. Objekt je datova struktura. Jak tu
strukturu naplnite, jestli budete sdilet hodnoty ci nikoli, je zcela
na Vas.

-- 
------------------------------------------------------------------------
 Honza Pazdziora | adelton na fi.muni.cz | http://www.fi.muni.cz/~adelton/
 .project: Perl, mod_perl, DBI, Oracle, auth. WWW servers, XML/XSL, ...
		Only self-confident people can be simple.


Další informace o konferenci Perl