Moose Perl Vs oop Perl?

use*_*308 0 perl moose

moose Perl和oop Perl有什么区别?

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

fri*_*edo 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;
}
Run Code Online (Sandbox Code Playgroud)

现在我们需要制作一些存取器和变换器

sub x { 
    my $self = shift; 
    my $val = shift;

    $self->{x} = $val;
}
Run Code Online (Sandbox Code Playgroud)

上面的代码是错误的.你知道原因吗?我们还必须为y参数复制此内容.我们可以复制和粘贴代码,或者至少使用符号别名来避免C&P.

在Moose中,这个定义如下:

package Point;
use Moose; 

has 'x' => (is => 'rw', isa => 'Int');
has 'y' => (is => 'rw', isa => 'Int');
Run Code Online (Sandbox Code Playgroud)

这是做什么的:

  • 打开strictwarnings为你服务
  • 设置这验证了一个构造函数xy是整数
  • xy字段设置(非错误)访问器和更改器
  • 设置内省的元类,并提供元对象

只需四行代码即可免费获得所有这些(实际上还有更多).

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

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