加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

perl 闭包

发布时间:2020-12-15 23:40:10 所属栏目:大数据 来源:网络整理
导读:就像我们有无数的方法创建引用一样,我们也有好几种方法使用引用(或者称之为解引用). 使用过程中只有一个最高兴的原则:Perl不会做任何隐含的引用或者解引用动作。 如果一个标量挂在了一个引用上,那么它总是表现出简单标量的行为。它不会突然就称为一个数组或

就像我们有无数的方法创建引用一样,我们也有好几种方法使用引用(或者称之为解引用).

使用过程中只有一个最高兴的原则:Perl不会做任何隐含的引用或者解引用动作。

如果一个标量挂在了一个引用上,那么它总是表现出简单标量的行为。它不会突然就称为一个数组或者散列或是子过程,

你必须明确地告诉它进行转变,方法就是对它解引用。

8.3.1 把一个变量当作变量名使用

如果你看到一个标量,比如$foo,你应该把它看成foo的标量值。 也就是说,在符号表里有一条foo记录,

而趣味字符$是一个查看其内部的标量值的方法。如果在里面的是一个引用,那么你可以通过在前面再增加一个趣味字符来查看引

用的内容(解引用).

因此不仅仅$$foo是指$foo指向的标量值,@$bar 是$bar指向的数组值,

% glarch glach指向的散列数值

标量引用:

foo=threehumps; scalarref = $foo; # scalarref foo 的引用
camelmodel= scalarref;?#camel_model 现在是”three humps”

8.3.2 把一个BLOCK 块当作变量名用

8.3.3 使用箭头操作符

对于指向数组,散列,或者子程序的引用,第三种解引用的方法设计到使用-> 中缀操作符。

这样做就形成了一种语法糖,这样就让我们可以更容易访问独立的数组或者散列元素,或者散列元素,或者间接地调用一个子过程

array[3] array->[3] 是不一样的,第一个东西讲的是@array里的第四个元素,而第2个东西讲的是一个保存在$array里的数组

8.3.4 使用对象方法:

8.3.7 闭包

我们早些时候谈到过一个没有名字的sub{}创建匿名子过程。你可以把那些字过程看做是运行时定义,

这就意味着它们有一个生产的时间和一个定义的地点。在创建子过程的时候,有些变量可能在范围里,

而调用子过程的时候,可能有不同的变量在范围里。

[root@master Webqq]# cat t18.pl
{
my critter=camel; critterref = $critter;
print “1——-$critter is crittern;print2?$critterrefis critterrefn";
};
print?"3-------$critter?is
crittern"; print "4-------$critterref is $$critterrefn”;
[root@master Webqq]# perl t18.pl
1——-$critter is camel
2——-$critterref is camel
3——-$critter is
4——-$critterref is camel

$$critterref 的数值仍将使camel,即使在离开闭合的户啊括弧之后$critter小时了也如此。

但是 critterref critter的子过程:

{
my critter=camel; critterref = sub { return $critter };
}

这是一个闭包(闭包)

在基于事件的编程里面,这种做法常常叫做回调(callback),比如把一些代码和一次键盘敲击,鼠标单击,窗口弹出联系起来。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读