Chinaunix首页 | 论坛 | 博客
  • 博客访问: 226585
  • 博文数量: 36
  • 博客积分: 1188
  • 博客等级: 军士长
  • 技术积分: 802
  • 用 户 组: 普通用户
  • 注册时间: 2010-04-08 21:45
文章分类

全部博文(36)

文章存档

2020年(1)

2017年(2)

2015年(1)

2014年(1)

2013年(1)

2012年(3)

2011年(27)

分类: WINDOWS

2011-04-08 21:06:46

    今天在CU论坛看到一个关于perl的oop解释,觉得是我有史以来看到最简明扼要的,以前看书上写的老是看不懂,看了这个解释后,终于恍然大悟,写个例子放Blog上备查。
详见:
  1. package ShowTime;
  2. use POSIX qw(strftime);

  3. sub new {
  4.     my $self = shift;
  5.     my $class = ref ($self) || $self;
  6.     my $rh = {@_};
  7.     bless $rh, $class;
  8.     return $rh;
  9. }

  10. sub StrTime {
  11.     my $self = shift;
  12.     my $time = strftime( "%m-%d-%Y %H:%M:%S", localtime(time) );
  13.     #内部使用初始化参数
  14.     my $welcome=$self ->{name}.'您好!';
  15.     
  16.     #调用内置方法
  17.     $self ->_test($welcome);
  18.     $self ->_test('现在的时间是:');
  19.     return $time;
  20. }

  21. sub _test{
  22.     my ($self,$print) = @_;
  23.     print $print,"\n";
  24.     }
  25. package main;
  26. my $o=ShowTime->new(('name','Tom'));
  27. my $time=$o->StrTime();
  28. print "$time\n";

  29. #外部调用初始化参数
  30. print "$o->{name}\n";
  31. __END__
  32. $self 是用来接收传入给constructor 的第一个参数,这个参数不是你的new后面括号里的内容,而是 一个object 或者Bug (package name)
  33. 至于my $rh = { @_ }; 这个是用于接受初始化参数的,
  34. 也可以用数组引用my $rh = [ @_ ];取值时类内部$self->[0],实例化后$0->[0]
  35. bless $rh, $class;把$rh跟Moudle关联起来,本例的话就是将$rh与ShowTime类关联。
用perl6改写代码如下:
  1. class ShowTime{
  2.     has $.name is rw;
  3.     method SrtTime{
  4.         my $time=DateTime.now;
  5.         my $welcome=$.name ~ '您好!';
  6.         self!_test($welcome);
  7.         self!_test('现在的时间是:');
  8.         return $time;
  9.         }
  10.     method !_test($print){
  11.         say $print;
  12.         }
  13. }

  14. my $o = ShowTime.new(name=>'Tom');
  15. my $time=$o.SrtTime();
  16. say $time;
阅读(3282) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~