В чем разница между лосем Perl и oop Perl?Moose Perl Vs oop Perl?
Почему мы используем Moose Perl вместо oop Perl?
В чем разница между лосем Perl и oop Perl?Moose Perl Vs oop Perl?
Почему мы используем Moose Perl вместо oop Perl?
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
целыеx
и y
пологоВы получаете все, что (и на самом деле намного больше) бесплатно только в четырех строках кода.
Если вы еще не знакомы с тем, как работает Perl OO, я рекомендую читать (а затем перечитывать) Perl OO Tutorial.
Затем, начните читать про Мусс. Отличной отправной точкой является Moose::Manual POD.
Moose - это просто каркас oop, который делает то же самое для oop в Perl, но с меньшим количеством шагов. – edem