驼鹿Perl和oop Perl有什么区别?
为什么我们使用Moose Perl来代替oop Perl?
发布于 2013-04-12 15:33:39
驼鹿Perl是OO。Moose是建立在Perl 5 OO系统之上的对象框架。
Moose为您提供了大量工具,使OO更易于使用和更健壮。Perl的对象系统非常简单;它允许您做任何您想做的事情,这是非常强大的,但它也意味着您必须自己完成所有事情。例如,在纯OO中,您可以实现一个对象来表示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。
在驼鹿中,这一定义如下:
package Point;
use Moose;
has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');这样做的目的是:
strict和warningsx和y是整数。x和y字段设置(无buggy的)访问器和变异器您只需四行代码就可以免费获得所有这些(实际上还有更多)。
如果您还不熟悉Perl的工作方式,我建议您阅读(然后再重新阅读) Perl OO教程。
那就开始读关于驼鹿的书吧。一个很好的起点是驼鹿::手册过氧化物酶。
https://stackoverflow.com/questions/15975137
复制相似问题