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 里,真是不错的
阅读(554) | 评论(0) | 转发(0) |