關於perl閉包(個人理解)

來源:互聯網
上載者:User

標籤:詞法   pre   bin   存在   return   style   特定   列印   引用   

我個人理解,就是當一個變數超出範圍時,應是消失了,不見了的,但你還能訪問它,這就是閉包。


#看下面的例子。

#!/usr/bin/env perl -wuse 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個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.