Hatena::Groupcatalyst

dann@catalyst このページをアンテナに追加 RSSフィード

2008-05-02

MooseでDelegationを簡単

| MooseでDelegationを簡単 - dann@catalyst を含むブックマーク はてなブックマーク - MooseでDelegationを簡単 - dann@catalyst MooseでDelegationを簡単 - dann@catalyst のブックマークコメント

dmakiさんのコードを見て知ったのですが、handlesを使えばよいです.

package HTTP::Engine::Request;
use Moose;
use HTTP::Engine::Types::Request qw( Header );
use HTTP::Headers;

has headers => (
    is      => 'rw',
    isa     => 'Header',
    coerce  => 1,
    default => sub { HTTP::Headers->new },
    handles => [ qw(content_encoding content_length content_type header referer user_agent) ],
);

...

上記の例だとHTTP::Headersへ処理を委譲することができます。

上記の例のように、そのままのメソッド名でdelegationするのもできますが、Hashを渡すことで別名でdelegationすることもできます。

perldoc Mooseで、Hashの場合のdelegationの例が書いてあるので、それを見るのがよいです。

委譲するコードがとてもドライにかけるのでこれはよいですね。

トラックバック - http://catalyst.g.hatena.ne.jp/dann/20080502