Thread Callbacks und Closures?: Kann mal einer was dazu erzählen. (32 answers)
Opened by Ronnie at 2003-11-23 22:15

ptk
 2003-11-28 20:50
#72640 #72640
User since
2003-11-28
3645 Artikel
ModeratorIn
[default_avatar]
[quote=Cremator,28.Nov..2003, 19:19]Ich muss zugeben Closures ist ein Konzept in Perl das ich auch fuer voellig geisteskrank und (mittlerweile) mehr als fluessig halte. Ich zitiere mal das Beispiel aus dem Kamel-Buch fuer diejenigen die es nicht haben:
Quote
sub newprint {
my $x = shift;
return sub {
my $y = shift;
print "$x, $y!\n";
}
}
$h = newprint('Howdy');
$g = newprint('Greetings');

# ...

&$h('world'); # Ausgabe: Howdy, world!
&$g('earthlings'); # Ausgabe: Greetings, earthlings!


Also nur ein umstaendlicher Weg sich Variablen zu bauen die man nicht mehr veraendern kann. Scheint ein Ueberbleibsel von frueheren Perl-Versionen zu sein als es "use constant" noch nicht gab.
[/quote]

Aehm, hast du schon mal geguckt, wie Konstanten in constant.pm
realisiert werden? Genau, mit Closures.

Quote
Sonst sehe ich keinen rechten Sinn darin. Kann mir irgendjemand eine sinnvolle Anwendung dieses Variablengewurschtels von Closures nennen? Das Counter-Beispiel von Strat ist zwar ganz nett, aber wenn man auf Datenkapselung wert legt wuerde man das doch eher als OOP-Modul bauen, oder nicht?


Es ist eine grandiose Sache, ein Stueck Codereferenz mit sich
herumtragen zu koennen und nicht auf Variablenscopes achten zu
muessen. Etwas, um das dich jeder C-Programmierer (und
wahrscheinlich 98% aller anderer Programmiersprachen) beneiden
muessten.

Ich benutze Closures hauptsaechlich fuer Callbacks in Tk-Bindings.
Oder auch fuer Subroutinen innerhalb von Subroutinen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
sub aussen {
# viele Variablen werden hier verwendet
my $innen = sub {
# viele Variablen aus "aussen" werden hier verwendet, aber
# muessen nicht uebergeben werden
};

while(...) {
$innen->();
}
}

View full thread Callbacks und Closures?: Kann mal einer was dazu erzählen.