Schrift
[thread]6082[/thread]

Übergabe von Objecten



<< >> 10 Einträge, 1 Seite
esskar
 2004-02-18 15:45
#80198 #80198
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Hi...

Code: (dl )
my $obj = Object->new();


würdet ihr nun $obj als ref an eine sub üder geben, also

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
function1(\$obj);
function2($obj);

sub function1
{
my ($objref) = @_;
}

sub function2
{
my ($obj) = @_;
}


in function1 muss ich ja aber auch wieder dereferenzieren, um damit arbeiten zu können...
Crian
 2004-02-18 16:00
#80199 #80199
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Nein, bei oo-Objekten kopiert man die Referenzen einfach, weil einen nicht die Adresse der Referenz interessiert, sondern die Adresse dessen, auf das die Referenz verweist. Und genau diese Adresse ist der "Inhalt" Deiner Referenz, den Du kopierst.

Also Variante 2.

Oder als Methode, falls das, was Du mit dem Objekt machen möchtest thematisch zur Klasse gehört.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-02-18 16:16
#80200 #80200
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
okay...
ich benutz eh immer variante 2...
gerade kam mir aber der gedanke und ich dachte, ich frag mal!
Ronnie
 2004-02-18 16:18
#80201 #80201
User since
2003-08-14
2022 Artikel
BenutzerIn
[default_avatar]
Darauf hätte ich jetzt auch getippt, weil in Perl Objekte ja "gesegnete" Referenzen sind. Wozu also eine Referenz auf eine Referenz?!
ptk
 2004-02-18 16:25
#80202 #80202
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Ronnie,18.Feb..2004, 15:18]Darauf hätte ich jetzt auch getippt, weil in Perl Objekte ja "gesegnete" Referenzen sind. Wozu also eine Referenz auf eine Referenz?![/quote]
In Ausnahmefaellen vielleicht sinnvoll. Zum Beispiel, um ein Objekt in einer Funktion ersetzen zu koennen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
$bla = bless {}, "Bla";

sub austauschen {
my $objref = shift;
$$objref = bless {}, "Foo";
}

austauschen(\$bla);

use Data::Dumper;
warn Dumper($bla);
esskar
 2004-02-19 00:16
#80203 #80203
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
@ptk: der Umgang mit Pointern (Referenzen) ist mir wohl bekannt :P

aber guter Zusatz!
Crian
 2004-02-19 13:47
#80204 #80204
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
@ptk in dem Fall kannst Du aber auch auf $_[0] zugreifen ...
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
ptk
 2004-02-19 14:05
#80205 #80205
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
$_[0] verwenden kann man grundsaetzlich immer, auch bei normalen Skalaren. Dadurch verliert man aber den Dokumentationscharakter eines \...-Aufruf, naemlich kann man sehen, dass sich das Argument aendern kann. Ansonsten muss man das im Pod dokumentieren.
Crian
 2004-02-19 15:51
#80206 #80206
User since
2003-08-04
5872 Artikel
ModeratorIn
[Homepage]
user image
Stimmt. Insofern ist Deine Variante schöner.

Das ist auch ein Grund, warum ich in C++-Programmen manchmal lieber Zeiger als Referenzen übergebe, weil dann beim Lesen des Funktionsaufrufs schon klar ist, dass der Inhalt dessen, auf das gezeigt wird, ev. geändert werden könnte.
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
esskar
 2004-02-20 01:32
#80207 #80207
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
[quote=Crian,19.02.2004, 14:51]Stimmt. Insofern ist Deine Variante schöner.

Das ist auch ein Grund, warum ich in C++-Programmen manchmal lieber Zeiger als Referenzen übergebe, weil dann beim Lesen des Funktionsaufrufs schon klar ist, dass der Inhalt dessen, auf das gezeigt wird, ev. geändert werden könnte.[/quote]
hmmm...
der wert des pointers kann nur dann geändert werden, wenn er nicht const ist...

const int* ist im Grunde das selbe wie cont int & bzw. int* <=> int &

in Wirklichkeit biegt das der Compiler auch nur um... in Assembler ist beides das selbe... dies sieht man dann, wenn man sich mal das Assembly anschaut
<< >> 10 Einträge, 1 Seite



View all threads created 2004-02-18 15:45.