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 できるよ!みたいな・・・。やっぱり長いのはダメかな・・・。