Perl具有OOP功能,但它们很少使用.如何使用方法和属性创建和使用Perl对象?
你一定要看看Moose
.
package Point; use Moose; # automatically turns on strict and warnings has 'x' => (is => 'rw', isa => 'Int'); has 'y' => (is => 'rw', isa => 'Int'); sub clear { my $self = shift; $self->x(0); $self->y(0); }
Moose免费为您提供构造函数,访问器方法和类型检查(除其他外)!
所以在你的代码中你可以:
my $p = Point->new({x=>10 , y=>20}); # Free constructor $p->x(15); # Free setter print $p->x(); # Free getter $p->clear(); $p->x(15.5); # FAILS! Free type check.
一个很好的起点是Moose::Manual
和Moose::Cookbook
如果你只需要基本的东西,你也可以使用Mouse
哪个不完整,但没有大部分的编译时间惩罚.
麋,当然.
package Person; use Moose; has age => ( isa => Int, is => 'rw'); has name => ( isa => Str, is => 'rw'); 1;
您可以立即免费获得new()方法,以及刚刚使用'has'定义的属性的访问器方法.所以,你可以说:
my $person = Person->new(); $person->age(34); $person->name('Mike'); print $person->name, "\n";
等等.不仅如此,您的访问器方法也可以免费进行类型检查(您可以定义自己的类型以及标准类型).另外,你可以获得子类化的"扩展",角色/特征的'with',以及各种其他优秀的东西,它们可以让你继续完成编写优秀健壮的可维护OO代码的实际工作.
TMTOWTDI,但这个有效.
目前,每当我想要对象时,我都会使用Object :: InsideOut,它非常好,并且会比标准的祝福哈希对象提供很多功能.话虽如此,如果我开始一个新项目,我会认真看看穆斯.
虽然阅读官方PERL文档是好的,但我不建议尝试使用自己的对象框架,或者使用哈希构建对象,它很容易走上简单的道路并"直接"进入对象"私有"变量完全打破封装,当你想要重构对象时,这会回来咬你.
Perl对象不仅仅是祝福的哈希.他们是幸运的参考.它们可以(并且通常是)受祝福的哈希引用,但它们可以很容易地成为受祝福的标量或数组引用.