首页 > 代码库 > 关于perl闭包(个人理解)
关于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语言编程的” 的话:
表示某个特定时刻在一个特定的词法作用域中定义一个匿名函数时,它会假装在这个作用域中运行,
尽管之后可能在这个作用域之外调用(但它不是假装,它确实会在那个作用域中运行),就称为“闭包“。
#
#
个人建议按常规函数去理解就行,别 “太” 在意”闭包“ 这两个字。
关于perl闭包(个人理解)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。