2008年9月11日星期四

perlnotes:闭包

或许都知道了闭包是什么意思,下面是一个例子

sub generate_greeting{
my $greeting = $_[0];
return sub{
my $project = $_[0];
say "$greeting $project";
}
}

my $rs = generate_greeting("hello");
my $rs1 = generate_greeting("Good");

&$rs("world");
&$rs1("monring");

所有的技巧都在于$greeting已经超出了它的生存期

闭包的内幕
一个变量的创建有两个部分,变量名和变量值,它们之间是分离的实体,通过一个关系链接起来.同时还有一个引用计数记录了指向这个值的引用个数.当引用计数为零时变量值被释放.一个code快里面的变量,在code结束时变量会被释放.
但在这里返回code里面还有这个值,引用计数加一,所以不会被释放.

没有评论: