あるソフトウェアエンジニアの戯言

日々の開発やサーバ管理のなかで出てきたあれや、これや、あんなことや、こんなこと

この記事のキーワード:   Moose   perl

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::Coockbook 各Cookbookのレシピの目次 Mooseの基礎 Moose::Cookbook::Basics::Recipe1 シンプルなPoint のMooseによる実装例。 attribute とsubclass のデモ。 Moose::Cookbook::Basics::Recipe2 シンプルな銀行口座の例。もう少し複雑なクラス。 サブクラス内のメソッドと...
名前:
メールアドレス(任意):
参考URL(任意):

キーワードリスト

バックナンバー