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

術語匯編 Perl析構函數簡介

開發 架構
Perl語言中Perl析構函數有很多只,那么你對它的概念你是否了解,這里和大家簡單分享一下,希望本文的介紹能讓你有所收獲。

本文和大家重點討論一下Perl析構函數,Perl跟蹤對象的鏈接數目,當某對象的***一個應用釋放到內存池時,該對象就自動銷毀。對象的析構發生在代碼停止后,腳本將要結束時。

Perl析構函數

一、Perl析構函數簡介

Perl跟蹤對象的鏈接數目,當某對象的***一個應用釋放到內存池時,該對象就自動銷毀。對象的析構發生在代碼停止后,腳本將要結束時。對于全局變量而言,析構發生在***一行代碼運行之后。
如果你想在對象被釋放之前獲取控制權,可以定義DESTROY()方法。DESTROY()在對象將釋放前被調用,使你可以做一些清理工作。DESTROY()函數不自動調用其它DESTROY()函數,Perl不做內置的析構工作。如果構造函數從基類多次bless,DESTROY()可能需要調用其它類的DESTROY()函數。當一個對象被釋放時,其內含的所有對象引用自動釋放、銷毀。
一般來說,不需要定義DESTROY()函數,如果需要,其形式如下:

  1. subDESTROY{  
  2. #  
  3. #Addcodehere.  
  4. #  
  5. }  

因為多種目的,Perl使用了簡單的、基于引用的垃圾回收系統。任何對象的引用數目必須大于零,否則該對象的內存就被釋放。當程序退出時,Perl的一個徹底的查找并銷毀函數進行垃圾回收,進程中的一切被簡單地刪除。在UNIX類的系統中,這像是多余的,但在內嵌式系統或多線程環境中這確實很必要。

二、Perl析構函數之繼承

類方法通過@ISA數組繼承,變量的繼承必須明確設定。下例創建兩個類Bean.pm和Coffee.pm,其中Coffee.pm繼承Bean.pm的一些功能。此例演示如何從基類(或稱超類)繼承實例變量,其方法為調用基類的構造函數并把自己的實例變量加到新對象中。
Bean.pm代碼如下:

  1. packageBean;  
  2. requireExporter;  
  3. @ISA=qw(Exporter);  
  4. @EXPORT=qw(setBeanType);  
  5.  
  6. subnew{  
  7. my$type=shift;  
  8. my$this={};  
  9. $this->{'Bean'}='Colombian';  
  10. bless$this,$type;  
  11. return$this;  
  12. }  
  13.  
  14. #  
  15. #Thissubroutinesetstheclassname  
  16. subsetBeanType{  
  17. my($class,$name)=@_;  
  18. $class->{'Bean'}=$name;  
  19. print"Setbeanto$name\n";  
  20. }  
  21. 1;  
  22.  

此類中,用$this變量設置一個匿名哈希表,將'Bean'類型設為'Colombian'。方法setBeanType()用于改變'Bean'類型,它使用$class引用獲得對對象哈希表的訪問。

三、Perl析構函數之子類方法的重載

繼承的好處在于可以獲得基類輸出的方法的功能,而有時需要對基類的方法重載以獲得更具體或不同的功能。下面在Bean.pm類中加入方法printType(),代碼如下:

  1. subprintType{  
  2. my$class=shift@_;  
  3. print"ThetypeofBeanis$class->{'Bean'}\n";  
  4. }  

然后更新其@EXPORT數組來輸出:
@EXPORT=qw(setBeanType,printType);
現在來調用函數printType(),有三種調用方法:

  1. $cup->Coffee::printType();  
  2. $cup->printType();  
  3. $cup->Bean::printType();  

輸出分別如下:

ThetypeofBeanisMixed
ThetypeofBeanisMixed
ThetypeofBeanisMixed
為什么都一樣呢?因為在子類中沒有定義函數printType(),所以實際均調用了基類中的方法。如果想使子類有其自己的printType()函數,必須在Coffee.pm類中加以定義:

  1. #  
  2. #Thisroutineprintsthetypeof$class->{'Coffee'}  
  3. #  
  4. subprintType{  
  5. my$class=shift@_;  
  6. print"ThetypeofCoffeeis$class->{'Coffee'}\n";  
  7. }  
  8.  

 然后更新其@EXPORT數組:
@EXPORT=qw(setImports,declareMain,closeMain,printType);
現在輸出結果變成了:

ThetypeofCoffeeisInstant
ThetypeofCoffeeisInstant
ThetypeofBeanisMixed
現在只有當給定了Bean::時才調用基類的方法,否則直接調用子類的方法。
那么如果不知道基類名該如何調用基類方法呢?方法是使用偽類保留字SUPER::。在類方法內使用語法如:$this->SUPER::function(...argumentlist...);,它將從@ISA列表中尋找。剛才的語句用SUPER::替換Bean::可以寫為$cup->SUPER::printType();,其結果輸出相同,為:

ThetypeofBeanisMixed

四、Perl析構函數中Perl類和對象的一些注釋

OOP的***好處就是代碼重用。OOP用數據封裝來隱藏一些復雜的代碼,Perl的包和模塊通過my函數提供數據封裝功能,但是Perl并不保證子類一定不會直接訪問基類的變量,這確實減少了數據封裝的好處,雖然這種動作是可以做到的,但卻是個很壞的編程風格。
注意:
1、一定要通過方法來訪問類變量。
2、一定不要從模塊外部直接訪問類變量。

當編寫包時,應該保證方法所需的條件已具備或通過參數傳遞給它。在包內部,應保證對全局變量的訪問只用通過方法傳遞的引用來訪問。對于方法要使用的靜態或全局數據,應該在基類中用local()來定義,子類通過調用基類來獲取。有時,子類可能需要改變這種數據,這時,基類可能就不知道怎樣去尋找新的數據,因此,這時***定義對該數據的引用,子類和基類都通過引用來改變該數據。

***,你將看到如下方式來使用對象和類:
usecoffee::Bean;
這句語句的含義是“在@INC數組所有目錄的Coffee子目錄來尋找Bean.pm”。如果把Bean.pm移到./Coffee目錄,上面的例子將用這一use語句來工作。這樣的好處是有條理地組織類的代碼。再如,下面的語句:
useAnother::Sub::Menu;
意味著如下子目錄樹:./Another/Sub/Menu.pm

【編輯推薦】

  1. 深入學習Perl文件系統用法
  2. Perl格式化輸出概念詳解
  3. 實例解析Perl守護進程用法
  4. 解析Perl文件系統應用中函數的語法
  5. 術語匯編 Perl變量中Perl關聯數組用法解析
責任編輯:佚名 來源: csdn.net
相關推薦

2010-07-26 16:54:15

Perl引用

2010-07-13 09:02:16

Perl

2010-07-13 10:21:19

2010-07-19 16:56:56

Perl線程

2010-06-07 13:02:46

Hadoop簡介

2010-07-15 17:50:47

Perl模式

2010-07-20 09:05:08

Perl類

2010-09-17 09:19:08

Java API

2010-06-10 18:27:00

UML語言

2010-08-10 10:32:02

Flex語言

2010-07-14 11:27:42

Perl多進程

2010-07-14 15:05:21

Perl文件句柄

2010-07-15 15:47:46

Perl守護進程

2010-06-11 09:33:47

UML順序圖

2010-06-11 18:27:39

UML對象圖

2010-07-08 09:50:11

UML構件圖

2010-06-10 15:49:55

UML協作圖

2010-06-11 10:44:14

UML部署圖

2010-06-09 09:16:15

UML活動圖

2010-07-08 09:57:14

UML活動圖
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲国产成人在线 | 久久免费精品视频 | 精品一二区 | 国产精品99久久久久久www | 91精品国产91久久久久久吃药 | 日韩中文欧美 | 人人99| 色偷偷人人澡人人爽人人模 | 亚洲一区二区三区四区五区午夜 | 日韩欧美不卡 | 欧美日韩在线不卡 | 天天天久久久 | 午夜电影一区二区 | 日韩精品一区二区三区免费视频 | 欧美日韩一区在线观看 | 91久久久www播放日本观看 | 欧美精品1区2区3区 免费黄篇 | 亚洲成人免费电影 | 久久综合一区 | 久久久国产一区 | 婷婷国产一区 | 美女黄网 | 美女福利视频一区 | 国产69久久精品成人看动漫 | 久久免费小视频 | 欧美成人一区二区三区片免费 | 一区视频在线免费观看 | 欧美一区二区三区免费在线观看 | av乱码 | 在线观看av网站 | 成人精品一区二区三区中文字幕 | 亚洲一区二区三区乱码aⅴ 四虎在线视频 | 一区观看 | 国产成人jvid在线播放 | 日韩视频免费看 | www日韩高清 | 亚洲高清视频在线 | 日本视频一区二区三区 | 欧美国产视频 | 国产一区二区三区日韩 | 欧美黄在线观看 |