0

moose Perl 和 oop Perl 有什么区别?

为什么我们使用 Moose Perl 代替 oop Perl?

4

1 回答 1

25

Moose Perl 是面向对象的 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');

这是做什么的:

  • 开启strictwarnings为您服务
  • 设置一个构造函数来验证它x并且y是整数
  • x为andy字段设置(非错误的)访问器和修改器
  • 为自省设置元类,并提供元对象

只需四行代码,您就可以免费获得所有这些(实际上还有更多)。

如果您还不熟悉 Perl OO 的工作原理,我建议您阅读(然后重新阅读)Perl OO 教程

然后,开始阅读有关 Moose 的内容。Moose::Manual POD是一个很好的起点。

于 2013-04-12T15:33:39.280 回答