モダンPerl入門 (業務で使う実用的な Perl の“すべて”) を読んで、改めて Moose を勉強中です。 今回は、(Moose 本体でなくて互換・軽量版の)Mouse.pm が 生成してくれるアクセサのメソッドのコードを確認してみました。 is => 'rw'has 'attr01' => (基本となる read/write 可能なアトリビュートの場合。 ↑が Mouse に伝える定義で、↓が実際に生成されるアクセサのコード。 値を更新(代入)するときは、scalar @_ が 2 になっているはず。 sub attr01 { is => 'ro'has 'attr02' => (readonly にした場合、値を更新しようとすると confess でエラーが発生します。 sub attr02 { isa => 'Int'has 'attr03' => (isa で型(Int)を指定した場合。 更新時は代入前に verify_type_constraint_error が呼ばれて、型チェックが行われます。 $name にはアトリビュートの名前が入ります。 $attribute は、Mouse::Meta::Attribute オブジェクトです。 sub attr03 { lazy => 1, default => 'value'has 'attr04' => (デフォルト値を即値 'value' で指定した場合。 lazy なので、オブジェクト生成時でなくて、参照時に値が代入されます。 初回の参照前に、予め値を更新(代入)していれば、このデフォルト値は使用されません。 sub attr04 { lazy => 1, default => sub {}has 'attr05' => (デフォルト値を関数へのリファレンスで指定した場合。 初回の参照時(未更新の場合)に関数が呼び出されます。 sub attr05 {※この lazy に呼び出される関数を、クラス定義時でなくてインスタンス生成後に lazy に差し替える(上書きする)方法が欲しいのだけど、ムリなのかな……。 lazy => 1, builder => 'method'has 'attr06' => (ビルダーのメソッド名を指定した場合。 sub attr06 { trigger => sub {}has 'attr07' => (更新時に呼び出される関数を指定した場合。 トリガーの第1引数はオブジェクト(インスタンス)、第2引数は更新後の値、 第3引数にはこのアトリビュートの Mouse::Meta::Attribute オブジェクトが入る。 sub attr07 { handles => []has 'attr08' => (アトリビュートの値に対するメソッドを export するようなものか。 sub attr08 { handles => {}has 'attr09' => (アトリビュートの値に対するメソッドについて、別名を付けて定義する。 sub attr09 { clearer => 'clear_***'has 'attr10' => (値をクリアするメソッドを作ってくれる。 sub attr10 { predicate => 'has_***'has 'attr11' => (値が定義済(代入済)か確認するメソッドを作ってくれる。 sub attr11 { CPAN ドキュメントはこちら:Moose、Mouse。 しかし、牧さんの モダンPerl入門 良い本です! Moose に関しても、これだけ揃った日本語解説は初めてと思います。 レベルは少々高いので、『これから初めてのプログラミング言語として Perl を学ぼう』 としている人には向かないですが、Perl か、または他の言語を一通り使える方が、 現在の「モダンな」Perl の状況を学ぶのには最適な本と思います。 モダンPerl入門 (業務で使う実用的な Perl の“すべて”)牧 大輔 (著) 出版社: 翔泳社 (2009/2/10) ISBN-10: 4798119172 発売日: 2009/2/10 ⇒ Amazon で『モダンPerl入門』を購入 川崎は、今は昔、ソフトバンク版の Perlプログラミング を買って端から端までくまなく愛読して Perl を学んできたクチなのですが、さすがにもう内容も古く、今から学ぶ人には あまりオススメできる本ではありません。(基本ではあると思うが、歴史に近いか) しかし、モダンPerl入門 は、モダン Perl における『Perl プログラミング』に匹敵する本ではないかと思います。 |
| << 前記事(2009/02/28) | ブログのトップへ | 後記事(2009/03/11) >> |
| タイトル (本文) | ブログ名/日時 |
|---|
| 内 容 | ニックネーム/日時 |
|---|
| << 前記事(2009/02/28) | ブログのトップへ | 後記事(2009/03/11) >> |