Class::C3 を使うと継承順がかなりセンシティブになる。
たとえば、普段から Class::Accessor::Fast と Class::Data::Inheritable を同時に継承する場合にどちらが先かというのは、そんなに意識しないと思います。(僕はしません)
でも、Class::C3 を使う場合は、同じツリー内に継承順の矛盾があると実行できなくなってしまいます。(d:id:amachang:20061007:1160232763)
たとえば、以下のクラス郡とクラス群は同時に Class::C3 で呼べないことになる。
- Class::Data::Inheritable が先
- Class::Accessor::Fast が先
じゃあ、せめて Class::Data::Inheritable や Class::Data::Accessor は継承しないというのはどうでしょうか
use base qw/Class::Data::Accessor Class::Data::Inheritable/;
__PACKAGE__->mk_classdata($_) for qw/hoge fuga/;
__PACKAGE__->make_accessor('piyo');これをこうする
use base qw/Class::Data::Accessor/;
use Class::Data::Inheritable;
__PACKAGE__->Class::Data::Inheritable::mk_classdata($_) for qw/hoge fuga/;
__PACKAGE__->make_accessor('piyo');多少長くなるけど、他のクラスと C3 できるよ!みたいな・・・。やっぱり長いのはダメかな・・・。