Angenommen, ich eine Funktion haben, die einen Verschluss zurück:Destructors ohne Klassen
sub generator
{
my $resource = get_resource();
my $do_thing = sub
{
$resource->do_something();
}
return $do_thing;
}
# new lexical scope
{
my $make_something_happen = generator();
&$make_something_happen();
}
Ich mag wäre in der Lage sein, um zu gewährleisten, wenn $make_something_happe
n von Rahmen entfernt wird, kann ich einige $resource->cleanup();
Natürlich, wenn ich eine Klasse hätte, könnte ich dies mit einem Destruktor tun, aber das scheint ein bisschen Schwergewicht für das, was ich tun möchte. Dies ist nicht wirklich ein "Objekt" in dem Sinne, dass ein Objekt modelliert wird, es ist nur eine Funktionssache, die einen Code beim Start und unmittelbar vor dem Tod ausführen muss.
Wie würde ich das in Perl machen (und, aus Neugier, unterstützt jede Sprache diese Idee)?
Ja, einige andere Sprachen unterstützen dies (obwohl ich keine andere Hand nennen kann als einige Common Lisp-Implementierungen wie SBCL); Es wird normalerweise Finalizer genannt, im Gegensatz zu Destruktor (der Name "Destruktor" deutet auf explizite Speicherfreigabe hin). Eine Systemfunktion nimmt das zu beobachtende Objekt (äh, * Wert *) und die Funktion, die aufgerufen wird, wenn sie tot ist. –