Hatena::ブログ(Diary)

Islands in the byte stream

2009-02-12

Roleと抽象クラスの違い

Moose/MouseのRoleはMix-inのようなものらしいが,抽象クラスをMix-inするのと違ってそのロールクラスを継承ツリーに組み込むのではなく,シンボルとメタ情報をそのロールクラスを使用するクラスにコピーする点がMix-inと異なる,という理解でいいんだろうか。

この理解が正しいとして,Perl組み込みの継承メカニズムを使わないのかが分からない。$c->isa()と$c->does()を区別したいから?

MooseとClass::MOPを行ったりきたりしながらコードを読むのは幸いが,今はMouseという小さなディストリビューションがあるので,あとで読むことにする。

tokuhiromtokuhirom 2009/02/12 15:10 Role の場合、メソッド名が conflict する場合にメソッドの名前かえつつ mixin とかできるから、そのあたりは通常の継承では実現できないのでは。

gfxgfx 2009/02/12 17:42 あーなるほど。複雑な拡張を管理しやすいって感じですか。
しかし,継承でもextends()でちょいと名前をいじるくらいはできるはず…。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/gfx/20090212/1234413809