Perl的物件導向方法
{ package LivingCreature;
sub speak{
my $class = shift;
my $gender = shift;
print "a $gender $class goes ", $class->sound, "!\n";
}
}
{ package Animal;
@ISA = qw(LivingCreature);
# no definition for speak()
}
{ package Mouse;
@ISA = qw(Animal);
sub sound{'squeak'}
sub speak{
my $class = shift;
$class->SUPER::speak(@_);
print "[but you can barely hear it!]\n";
}
}
Mouse->speak('female');
E:\Documents and Settings\Administrator\My Documents\PerlScript>perl perl.pl
a female Mouse goes squeak!
[but you can barely hear it!]
註解:Class->method(@args)或者my $beast= 'Class'; $beast->method(@args)將會構建('Class', @args)引數列表,然後呼叫Class::method('Class',@args);如果沒有發現Class::method,則到@Class::ISA的包中尋找相應method。
$class->SUPER::speak(@_),從當前包的@ISA中對應的包中尋找speak方法,並將($class,@_)傳遞過去
如果將$class->Animal::speak(@_)換成Animal::speak($class, @_)後,因為在Animal中不存在speak方法,所以程式將出錯。而現在的方法在發現Animal中不存在speak方法後將去查詢他的@ISA中包的方法,發現LivingCreature存在speak方法,並呼叫
--------------------------------------------------------------------------------------
開發完一個類之後需要Export,接下來介紹一下相關內容
當輸入use Island::Plotting::Maps qw(load_map scale_map draw_map);
其等價於:
BEGIN{
require Island::Plotting::Maps;
Island::Plotting::Maps->import(qw(load_map scale_map draw_map));
}
這裡的require等價於 require "Island/Plotting/Maps.pm"
接下來利用Exporter的import以Navigate::SeatOfPants為了說明:
package Naviagte::SetOfPants;
use base qw(Exporter); #包含import方法
our @EXPORT = qw(guess_direction_toward);
our @EXPORT_OK =qw(
get_north_from_professor
according_to_GPS
ask_the_skipper_about
);
our %EXPORT_TAGS = (
all => [@EXPORT, @EXPORT_OK],
gps => [qw(according_to_GPS)],
direction => [qw(
get_north_from_professor
according_to_GPS
ask_the_skipper_about
guess_direction_toward
)],
);
@EXPORT表示Navigate::SeatOfPants預設被import的方法,
@EXPORT_OK表示Navigate::SeatOfPants可以被import的方法
%EXPORT_TAG的key表示一組Navigate::SeatOfPants可以被import的方法
use Navigate::SeatOfPants qw(:direction);
當然也可以直接寫import方法,以File::Basename為例:
sub import {
no strict 'refs';
my ($package, $file, $line) = caller;
warn "I was called by $package in $file\n";
for (qw(filename basename fileparse)){
*{$package."::$_"}= \&$_;
}
}
將生成衣呼叫者為字首的函式
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/24104518/viewspace-722694/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- go物件導向方法的呼叫Go物件
- [Java物件導向]static方法Java物件
- 1 物件導向的開發方法物件
- 物件導向-物件導向思想物件
- PHP 物件導向 (五)靜態方法PHP物件
- PHP 物件導向 (六)魔術方法PHP物件
- 物件導向與程式導向物件
- 程式導向與物件導向物件
- “程序導向”和“物件導向”物件
- 物件導向的軟體工程方法的優勢物件軟體工程
- 物件導向物件
- java的物件導向Java物件
- php中的程式導向與物件導向PHP物件
- 物件導向,搞定物件物件
- JAVA物件導向基礎--物件導向介紹Java物件
- PHP 物件導向 (九)物件導向三大特徵PHP物件特徵
- 全網最適合入門的物件導向程式設計教程:00 物件導向設計方法導論物件程式設計
- Python進階之物件導向(類的特殊方法)Python物件
- 更多物件導向的JavaScript物件JavaScript
- Golang 中的物件導向Golang物件
- JavaScript 的物件導向(OO)JavaScript物件
- Java:Java的物件導向Java物件
- PHP物件導向PHP物件
- 物件導向 -- 反射物件反射
- JavaScript 物件導向JavaScript物件
- JS物件導向JS物件
- Java物件導向Java物件
- Python——物件導向Python物件
- 物件導向--下物件
- scala物件導向物件
- 物件導向(下)物件
- Python物件導向Python物件
- 物件導向(oop)物件OOP
- [Java物件導向]Java物件
- python 物件導向Python物件
- Java — 物件導向Java物件
- 物件導向(上)物件
- python-程式導向、物件導向、類Python物件
- JS物件導向:JS繼承方法總結JS物件繼承