Chinaunix首页 | 论坛 | 博客
  • 博客访问: 576420
  • 博文数量: 207
  • 博客积分: 10128
  • 博客等级: 上将
  • 技术积分: 2440
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-10 21:40
文章分类

全部博文(207)

文章存档

2009年(200)

2008年(7)

我的朋友

分类:

2009-03-28 10:31:38

Perl 的 OO 系统的确是很强大,但是跟 python,ruby 等语言相比,提供的特性太少。当然,我们可以自己动手来实现那些我们想要的特性,但是如果事事都得自己动手来做,忒痛苦些了 :(,还好,现在有了 Moose。
Moose 是对 Perl 现有 OO 系统的一个扩展,使用 Moose,perl 的 oop 就简单多了 。。 呃。。相对简单多了 :) ,以下例子来自网络,我借用一下 :)
 
首先,我们创建一个基类 Animal
 

Class_Animal: { package Animal;
    use Moose;
    #属性
    has 'name' => (is => 'rw');
    has 'color' => (is => 'rw');

    #方法
    sub speak {
        my $self = shift;
        say $self->name, ' goes ', $self->sound;
    }

    sub sound {
        confess shift, ' should have defined sound!';
        #注意 confess ,如果 派生类 没有定义 sound,这里会抱怨一下
    }
}

两个派生类

Class_Horse: { package Horse;
    use Moose;

    extends 'Animal'; #不用 use base 。。。 了
    sub sound {'neigh'}
}

Class_Sheep: { package Sheep;
    use Moose;

    extends 'Animal';
    sub sound {'baaah'}
}

看起来的确简单多了,我们也不用自己写 accessor 了,组合到一起来

 

use 5.010;

Class_Animal: { package Animal;
    use Moose;

    #属性
    has 'name' => (is => 'rw');
    has 'color' => (is => 'rw');

    #方法
    sub speak {
        my $self = shift;
        say $self->name, ' goes ', $self->sound;
    }

    sub sound {
        confess shift, ' should have defined sound!';
        #注意 confess ,如果 派生类 没有定义 sound,这里会抱怨一下

    }
}

Class_Horse: { package Horse;
    use Moose;

    extends 'Animal'; #不用 use base 。。。 了

    sub sound {'neigh'}
}

Class_Sheep: { package Sheep;
    use Moose;

    extends 'Animal';

    sub sound {'baaah'}
}

Class_Main: {

    my $horse = Horse->new(name => 'Mr. Ed', color => 'black');
    my $sheep = Sheep->new();

    $horse->speak;
    say $horse->color;

    $sheep->name('Ms. Bar');
    $sheep->color('white');
    
    $sheep->speak;
    say $sheep->color;    

}

 

这只是 Moose 的简单的示范,Moose 有许多有趣的特性,以后慢慢学 :)

如果 Moose 真的能进入 perl 5 里,真是不错的

 

阅读(529) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~