今天在CU论坛看到一个关于perl的oop解释,觉得是我有史以来看到最简明扼要的,以前看书上写的老是看不懂,看了这个解释后,终于恍然大悟,写个例子放Blog上备查。
详见:
- package ShowTime;
- use POSIX qw(strftime);
- sub new {
- my $self = shift;
- my $class = ref ($self) || $self;
- my $rh = {@_};
- bless $rh, $class;
- return $rh;
- }
- sub StrTime {
- my $self = shift;
- my $time = strftime( "%m-%d-%Y %H:%M:%S", localtime(time) );
- #内部使用初始化参数
- my $welcome=$self ->{name}.'您好!';
-
- #调用内置方法
- $self ->_test($welcome);
- $self ->_test('现在的时间是:');
- return $time;
- }
- sub _test{
- my ($self,$print) = @_;
- print $print,"\n";
- }
- package main;
- my $o=ShowTime->new(('name','Tom'));
- my $time=$o->StrTime();
- print "$time\n";
- #外部调用初始化参数
- print "$o->{name}\n";
- __END__
- $self 是用来接收传入给constructor 的第一个参数,这个参数不是你的new后面括号里的内容,而是 一个object 或者Bug (package name)。
- 至于my $rh = { @_ }; 这个是用于接受初始化参数的,
- 也可以用数组引用my $rh = [ @_ ];取值时类内部$self->[0],实例化后$0->[0]
- bless $rh, $class;把$rh跟Moudle关联起来,本例的话就是将$rh与ShowTime类关联。
用perl6改写代码如下:
- class ShowTime{
- has $.name is rw;
- method SrtTime{
- my $time=DateTime.now;
- my $welcome=$.name ~ '您好!';
- self!_test($welcome);
- self!_test('现在的时间是:');
- return $time;
- }
- method !_test($print){
- say $print;
- }
- }
- my $o = ShowTime.new(name=>'Tom');
- my $time=$o.SrtTime();
- say $time;
阅读(3282) | 评论(0) | 转发(0) |