machine的blogma2ma.blog.chinaunix.net
machine
全部博文(142)
vim(8)
命令使用(5)
lfs(15)
测试程序(1)
cookbook学习(20)
2011年(8)
2010年(7)
2009年(64)
2008年(63)
xiaoyu98
好儿
jelon521
yviihfw
Bsolar
zzhen201
ghostwwl
llplg
lemontre
jiqing10
nanshanj
分类:
2008-12-22 16:01:51
#!/perl ######################################################################例子 my $name="Tommy"; #词法作用域变量--这个程序文件内有效 { my $name = "Grandfather"; # 词法作用域变量--这个闭合的语句块内有效 my $age = 86; # 词法作用域变量--这个闭合的语句块内有效 $ref = sub{ return "$name is $age.\n"; } #定义一个匿名函数的参考,在函数中调用闭合块内的变量 } print "$name is back\n";#这里打印的时候块里的$name已经“过期”了,所以肯定打印的是块外的$name。 print &{$ref}; # 这里通过参考来调用上面的匿名子函数,此时打印的却是块内的变量的内容。这个子例程就是闭包。 # Output: # Tommy is back. # Grandfather is 86. print "#############################################\n"; #########################################################################应用1 sub make_saying { my $salute = shift; my $newfunc = sub { my $target = shift; print "$salute, $target!\n"; }; return $newfunc; # 返回一个闭合 } $f = make_saying("Howdy"); # 创建一个闭合 -->这里$salute="Howdy" $g = make_saying("Greetings"); # 创建另外一个闭合 -->这里$salute="Greetings" # 到时... $f->("world"); #结果打印 Howdy world $g->("earthings"); #结果打印 Greetings earthings ##########################################################################应用2 sub multiply_by { my $multiplier = $_[0]; return sub { return $_[0] * $multiplier; } } my $times2 = multiply_by(2); my $times10 = multiply_by(10); print &$times2(4), "\n"; print &$times2(6), "\n"; print &$times10(4) ,"\n"; # Results: # 8 # 12 # 40 ########################################################################## #我的理解是:如果一个匿名函数调用词法作用域变量时。 #它会使变量的参考数增加,从而使其变量的生命可以得以延续,在匿名函数被调用时,就可以访问到这些变量的值。 #可以理解成夹带这这些变量的子例程。 #也可以理解成对这些变量的另一种形式的参考。
上一篇:Linux操作系统上Lsof命令详解
下一篇:在 Linux 使用 PCMCIA 網卡(转)
登录 注册