[2008-11-05]
Mooseのお勉強(1)
Mooseのドキュメントを読んでの覚書
Moose::Intro
- new, DESTROYメソッドは作ってはいけない
Class
- class は attribute を持つことができる
- class は method を持つことができる
- class は superclass を持つことができる
- class は method modifier を持つことができる
- class では role が実行されることがある
- class は コンストラクタとデストラクタを持つことができる。(ただし、new, DESTORYという名前ではなく BUILD(), DEMOLISH() という名前のメソッドになる)
- コンストラクタには名前つき引数を与えてインスタンスのattributeを初期化することができる
- class は metaclassを持つ。 metaclassには meta-attribute, meta-method, meta-role が含まれる。 metaclassはインスタンスから取得できるclassの定義そのもの。
Attribute
- attribute は read/writeフラグ, 型, アクセサメソッド, delegation, 初期値、その他を持つ。
- attribute はそのまま参照することはできない(してはいけない)。かならずアクセサを使って参照/書換えをおこなう。
Method
- 普通に sub で関数を作ればいい。
Role
- Javaでいうところのinterface
- role は attribute を持つことができる
- role は method を持つことができる
- role は method modifier を持つことができる
- role は required method (Javaでいうところの abstruct function) を持つことができる
- role を定義するには Moose::Role を use する
Method Modifier
- method modirier をつかって、method に hook をかけることができる
- ''before'', ''after'', ''around'', ''augment'' が使える
- ひとつのmethodに複数のmodifierをかけることができる
型(Type)
- attributeには型による制約を付けることができる
- ''Str'', ''Num'', ''Bool'', ''HashRef'' などのMoose組込型がある
- クラス名をそのまま型名として使える
Delegation
- attribute が class のときにそのクラスのインスタンスメソッドに別名を付けてアクセスできるようにする機能(?)
- 例えば下のように定義されているとき、$obj->date_of_last_login() は last_login->date() として機能する (で、いいのかな?)
has 'last_login' => (
is => 'rw',
isa => 'DateTime',
handles => { 'date_of_last_login' => 'date' },
);
コンストラクタとデストラクタ
- コンストラクタは BUILD() として定義する。 Moose::Object の new メソッド内から呼び出される
- デストラクタは DEMOLISH() として定義する。
metaclass
- metaclassを使ってインスタンスから class の定義を取得することができる。
- Moose::Object の meta() メソッドを呼び出してそのインスタンスのmetaclass を取得できる。取得したmetaclassデータは Moose::Meta::Class オブジェクト。
[トラックバック]
トラックバックPingURL : http://blog.d-pad.co.jp/sugi/dblog/ping.fcgi/26
言及リンクのないページからのトラックバックは拒否される仕様になっておりますのでご注意ください。
■
Mooseのお勉強(2)
[あるソフトウェアエンジニアの戯言]
(2008-11-13 20:55:14)
Moose::Coockbook 各Cookbookのレシピの目次 Mooseの基礎 Moose::Cookbook::Basics::Recipe1 シンプルなPoint のMooseによる実装例。 attribute とsubclass のデモ。 Moose::Cookbook::Basics::Recipe2 シンプルな銀行口座の例。もう少し複雑なクラス。 サブクラス内のメソッドと...
[コメント]
コメントを記入する