假設我有一個返回閉包功能:析構函數無類
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();
}
我希望能夠確保當$make_something_happe
n爲從範圍刪除,我能夠調用一些$resource->cleanup();
當然,如果我有一個類,我可以用析構函數做到這一點,但是對於我想要做的事來說,這看起來有點重量級。從建模對象的角度來看,這不是一個「對象」,它只是一個需要在啓動時和死亡之前執行一些代碼的函數。
我該如何在Perl中做這件事(出於好奇,任何語言都支持這種想法)?
是的,其他一些語言支持這一點(儘管除了一些Common Lisp實現(例如SBCL),我不能指定任何其他語言)。它通常被稱爲終結器,而不是析構函數(名稱爲「析構函數」暗示顯式釋放內存)。一個系統函數接受對象(er,* value *)的監視,並在死亡時調用該函數。 – 2012-03-26 22:25:51