0

moose Perl と oop Perl の違いは何ですか?

なぜ oop Perl の代わりに Moose Perl を使用しているのですか?

4

1 に答える 1

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;
}

次に、いくつかのアクセサーとミューテーターを作成する必要があります

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フィールドの (バグのない) アクセサーとミューテーターをセットアップします。
  • イントロスペクション用のメタクラスをセットアップし、メタオブジェクトも提供します

わずか 4 行のコードで、これらすべて (実際にはそれ以上) を無料で入手できます。

Perl OO の仕組みにまだ慣れていない場合は、Perl OO チュートリアルを読む (そしてもう一度読む) ことをお勧めします。

次に、Moose について読み始めます。Moose::Manual PODは素晴らしい出発点です。

于 2013-04-12T15:33:39.280 に答える