2013-04-12 2 views
1

В чем разница между лосем Perl и oop Perl?Moose Perl Vs oop Perl?

Почему мы используем Moose Perl вместо oop Perl?

+0

Moose - это просто каркас oop, который делает то же самое для oop в Perl, но с меньшим количеством шагов. – edem

ответ

25

Moose Perl - OO Perl. Moose - это объектная структура, построенная поверх системы Perl 5 OO.

Что предлагает вам Moose - это большое количество инструментов, которые упрощают использование OO Perl и более надежны. Объектная система Perl очень голая; он позволяет вам делать все, что угодно, что очень важно, но это также означает, что вы должны делать все сами. Например, вот как вы можете реализовать объект для представления точки в 2D-плоскости в чистом OO Perl.

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 целые
  • Задаст (не багги) Accessors и мутаторы для x и y полого
  • устанавливает метакласс для самоанализа, и обеспечивают метаобъекты а

Вы получаете все, что (и на самом деле намного больше) бесплатно только в четырех строках кода.

Если вы еще не знакомы с тем, как работает Perl OO, я рекомендую читать (а затем перечитывать) Perl OO Tutorial.

Затем, начните читать про Мусс. Отличной отправной точкой является Moose::Manual POD.