闭包的潜在用处
2016-07-29 22:16
197 查看
一个潜在的有用的是使用闭包来产生动态的子函数 基于一个模板,使用一个相对简单的例子: [root@wx03 0729]# cat a1.pl 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"; [root@wx03 0729]# perl a1.pl 8 12 40 采用这种方式,闭包本质上让你创建定制的subs, 冻结参数的行为 被传递这在它们的创建期间。 我发现这个是有用的,如果我需要定义相关的数据 但是不是相同的行为对于应用元素到数据集,比如: 你也可以使用闭包来强制严格的数据封装,因为它们允许你创建变量,不存在与外部世界 只是一个想法,但是闭包类有一个特殊的意义在Perl 5, 而在大多数请求下 一个闭包有传统的"子函数" 运行在他定义的上下文, 我也发现perlers 经常使用它 从意义上说"函数引用到一个匿名的子函数" 这个可能 来自事实 闭包机制在perl是被部分破坏, 在一般意义只有应用于一个匿名子函数,不是一个显示命名的函数, 尝试这么做会导致"不共享"警告, 已经有很好的例子,你可以使用闭包posted 我不会给一个例子 [root@wx03 0729]# cat a2.pl use strict; use warnings; sub function { my $i = 0; sub test { print ++$i,"\n"; } test(); test(); } [root@wx03 0729]# perl a2.pl Variable "$i" will not stay shared at a2.pl line 7. 你可能得到一个 "variable will not stay shared" 的警告,不会得到你期望的结果。 这个情况很多和 Apache::Registry 因为人们会写子函数 用全部变量和 Apache::Registry 覆盖整个脚本 到一个它自己的子函数. 闭包是很酷的 在回调模型:
相关文章推荐
- 闭包的潜在用处
- Java多线程系列之线程状态图
- POJ 2296 Map Labeler 2-SAT+二分答案
- Codeforces Round #129 (Div. 1)B Little Elephant and Cards
- Visual Studio Code常用设置
- Codeforces Round #129 (Div. 1)B Little Elephant and Cards
- 习题3-7 DNA序列 UVa1368
- 2D平移矩阵与3D平移矩阵
- linux基础命令2
- 广告点击预测
- SPDA-CNN:Unifying Semantic Part Detection and Abstraction for Fine-grained Recognition
- 进阶项目6.1-两人生日差
- nyoj 325 zb的生日
- android 坐标问题
- Callable、Future和FutureTask
- codeforces 22E XOR on Segment 线段树
- 上传docker镜像到hub.docker
- UVa Live (LA) 3644 典型并查集
- HDU 3366 Passage (概率DP)
- 20160729 其他小代码