成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

深入理解Perl閉包及其應用

開發 架構
本文向大家簡單介紹一下Perl閉包的概念,在Perl里面,Perl閉包是以匿名函數的形式來實現,具有持續參照位于該函數范圍之外的文字式變數值的能力。

本文和大家重點學習一下Perl閉包的概念,閉包(closure)是個精確但又很難解釋的電腦名詞。在Perl里面,Perl閉包是以匿名函數的形式來實現,具有持續參照位于該函數范圍之外的文字式變數值的能力。

閉包的基本概念

  閉包是可以包含自由(未綁定)變量的代碼塊;這些變量不是在這個代碼塊或者任何全局上下文中定義的,而是在定義代碼塊的環境中定義。“閉包”一詞來源于以下兩者的結合:要執行的代碼塊(由于自由變量的存在,相關變量引用沒有釋放)和為自由變量提供綁定的計算環境(作用域)。在Scheme、CommonLisp、Smalltalk、Groovy、JavaScript、Ruby和Python等語言中都能找到對閉包不同程度的支持。

Perl閉包

  閉包(closure)是個精確但又很難解釋的電腦名詞。在Perl里面,Perl閉包是以匿名函數的形式來實現,具有持續參照位于該函數范圍之外的文字式變數值的能力。這些外部的文字變數會神奇地保留它們在閉包函數最初定義時的值(深連結)。

  如果一個程式語言容許函數遞回另一個函數的話(像Perl就是),Perl閉包便具有意義。要注意的是,有些語言雖提供匿名函數的功能,但卻無法正確處理閉包;Python這個語言便是一例。如果要想多了解閉包的話,建議你去找本功能性程式設計的教科書來看。Scheme這個語言不僅支援閉包,更鼓勵多加使用。
  以下是個典型的產生函數的函數:
  

  1. subadd_function_generator{  
  2.   returnsub{shift+shift};  
  3.   }  
  4.   $add_sub=add_function_generator();  
  5.   $sum=&$add_sub(4,5);#$sum現在是9了  

 

  Perl閉包用起來就像是個函數樣板,其中保留了一些可以在稍後再填入的空格。add_function_generator()所遞回的匿名函數在技術上來講并不能算是一個閉包,因為它沒有用到任何位在這個函數范圍之外的文字變數。

  把上面這個例子和下面這個make_adder()函數對照一下,下面這個函數所遞回的匿名函數中使用了一個外部的文字變數。這種指名外部函數的作法需要由Perl遞回一個適當的閉包,因此那個文字變數在匿名函數產生之時的值便***地被鎖進閉包里。
  

  1. submake_adder{  
  2.   my$addpiece=shift;  
  3.   returnsub{shift+$addpiece};  
  4.   }  
  5.   $f1=make_adder(20);  
  6.   $f2=make_adder(555);  

  這樣一來&$f1($n)永遠會是20加上你傳進去的值$n,而&$f2($n)將永遠會是555加上你傳進去的值$n。$addpiece的值會在閉包中保留下來。
  Perl閉包在比較實際的場合中也常用得到,譬如當你想把一些程式碼傳入一個函數時:
  my$line;
  timeout(30,sub{$line=<STDIN>});
  如果要執行的程式碼當初是以字串的形式傳入的話,即'$line=<STDIN>',那么timeout()這個假想的函數在回到該函數被呼叫時所在的范圍後便無法再擷取$list這個文字變數的值了。
 

【編輯推薦】

  1. Perl encode函數用法
  2. Perl模式匹配參數使用詳解
  3. 實例解析Perl多進程技術的應用
  4. 實例解析Perl命令行實用程序
  5. Perl多進程在自動化測試場景中應用

 

 

責任編輯:佚名 來源: hi.baidu.com
相關推薦

2011-03-02 12:33:00

JavaScript

2022-05-06 16:18:00

Block和 C++OC 類lambda

2023-03-02 08:26:36

RedisAVL紅黑樹

2024-04-24 08:32:55

.NET對象映射

2021-06-30 17:55:34

Redis應用跳表

2022-11-07 18:12:54

Go語言函數

2024-10-11 11:54:14

C#編寫異步

2010-06-01 15:25:27

JavaCLASSPATH

2016-12-08 15:36:59

HashMap數據結構hash函數

2020-07-21 08:26:08

SpringSecurity過濾器

2024-01-11 11:51:51

Rustmap數據結構

2024-01-09 08:28:44

應用多線程技術

2023-10-19 11:12:15

Netty代碼

2021-02-17 11:25:33

前端JavaScriptthis

2009-09-25 09:14:35

Hibernate日志

2013-09-22 14:57:19

AtWood

2020-09-23 10:00:26

Redis數據庫命令

2019-06-25 10:32:19

UDP編程通信

2017-01-10 08:48:21

2024-02-21 21:14:20

編程語言開發Golang
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 美女国产一区 | 亚洲人成人一区二区在线观看 | 国产精品亚洲第一区在线暖暖韩国 | 91久久看片| 国产九九精品视频 | 免费观看av网站 | 久久精品一二三影院 | 先锋资源网站 | 毛色毛片免费看 | 成人亚洲网站 | 国产精品黄色 | 午夜精品一区二区三区在线视频 | 国产精品视频在线观看 | 亚洲综合成人网 | 日韩精品在线网站 | 亚洲一区二区中文字幕 | 一级黄色日本片 | 欧美久久国产精品 | 国产激情一区二区三区 | 亚洲精品99 | 久久精品国产一区 | 国产精品一卡二卡三卡 | 国产黄a一级 | 成人在线小视频 | 欧美综合在线视频 | 毛片国产| 伊人欧美视频 | 最新国产在线 | 亚洲成人999 | 久久国产欧美一区二区三区精品 | 欧美国产精品 | 91精品国产91久久久久久最新 | 一区二区精品 | 中文字幕一二三区 | 久久国产精品一区二区三区 | 国产极品粉嫩美女呻吟在线看人 | 国产剧情一区二区三区 | 午夜av成人 | 99re6在线视频精品免费 | 欧美一区二区三区在线播放 | 国产一区高清 |