zoukankan      html  css  js  c++  java
  • 关于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
    ";};
     6         return $in_function_1
     7 }
     8  
     9 my $value = function_1;
    10 $value->();

    结果如下:

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


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

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


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


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

  • 相关阅读:
    让IE6 IE7 IE8 IE9 IE10 IE11支持Bootstrap的解决方法
    检测到有潜在危险的 Request.Form 值
    jQuery校验
    C#客户端的异步操作
    泛型(一)
    c#面试题汇总
    多线程(下)
    多线程(上)
    线程篇(二)
    线程篇(一)
  • 原文地址:https://www.cnblogs.com/perl6/p/6120050.html
Copyright © 2011-2022 走看看