moose Perl和oop Perl之间有什么区别?
为什么我们使用Moose Perl代替oop Perl?
答案 0 :(得分:25)
Moose Perl是OO Perl。 Moose是一个建立在Perl 5 OO系统之上的对象框架。
Moose为您提供了大量工具,使OO Perl更易于使用且更强大。 Perl的对象系统非常简单;它可以让你做任何你想要的东西,这是非常强大的,但它也意味着你必须自己做所有事情。例如,以下是如何实现一个对象来表示纯OO Perl中2D平面中的点。
package Point;
use strict;
use warnings;
use Carp 'croak';
sub new {
my $class = shift;
my %args = @_;
# do a lot of complex and potentially buggy validation here
# to make sure you have both an X and a Y coordinate, that
# they're both numbers, etc.
return bless \%args, $class;
}
现在我们需要制作一些存取器和变换器
sub x {
my $self = shift;
my $val = shift;
$self->{x} = $val;
}
上面的代码是错误的。你知道原因吗?我们还必须为y
参数复制此内容。我们可以复制和粘贴代码,或者至少为符号添加别名以避免使用C& P.
在Moose中,这个定义如下:
package Point;
use Moose;
has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');
这是做什么的:
strict
和warnings
x
和y
是否为整数x
和y
字段设置(非错误)访问者和变更器只需四行代码就可以免费获得所有这些(实际上还有更多)。
如果您还不熟悉Perl OO的工作原理,我建议您阅读(然后重新阅读)Perl OO Tutorial。
然后,开始阅读有关驼鹿的内容。一个很好的起点是Moose::Manual POD。