关于perl闭包(个人理解)

我个人理解,就是当一个变量超出作用域时,应是消失了,不见了的,但你还能访问它,这就是闭包。


#看下面的例子。

#!/usr/bin/env perl -w
use strict;
{
        my $value = 'abc';
}
print $value;

如果如下:

 

因为{}超出后,$value不存在了,所以print变成打印一个未定义的变量,会出错。

 

再来看一个例子:

 1 #!/usr/bin/env perl -w
 2 use strict;
 3 sub function_1{
 4         my $value = 'abc';
 5         my $in_function_1 = sub{print "$value\n";};
 6         return $in_function_1
 7 }
 8  
 9 my $value = function_1;
10 $value->();

 

结果如下:

 

#
可以看到,这个$value应是不存在了的,但还能访问他,这种情况就称为”闭包”。


可能你会想说,这个不就是return返回给他了吗,因为第一个例子并不返回$value, 所以不能打印?!

个人看法:
对于第一个例子,如果你直接返回$value的话,他的值是返回了,但这个值虽相同,即不是同一个变量了。
而对于第二个例子,他访问的$value从头到尾都是它自身。(但内部,可能会自动创建变量的副本)


这里引用一句 “perl语言编程的” 的话:
表示某个特定时刻在一个特定的词法作用域中定义一个匿名函数时,它会假装在这个作用域中运行,
尽管之后可能在这个作用域之外调用(但它不是假装,它确实会在那个作用域中运行),就称为“闭包“。


个人建议按常规函数去理解就行,别 “太” 在意”闭包“ 这两个字。

 

转载于:https://www.cnblogs.com/perl6/p/6120050.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值