IT戦記

プログラミング、起業などについて書いているプログラマーのブログです😚

Class::Data::Accessor と Class::Data::Inheritable は個人的には継承しなくてもいいと思う(継承せずに使う)

Class::C3 を使うと継承順がかなりセンシティブになる。

たとえば、普段から Class::Accessor::Fast と Class::Data::Inheritable を同時に継承する場合にどちらが先かというのは、そんなに意識しないと思います。(僕はしません)
でも、Class::C3 を使う場合は、同じツリー内に継承順の矛盾があると実行できなくなってしまいます。(d:id:amachang:20061007:1160232763)

たとえば、以下のクラス郡とクラス群は同時に Class::C3 で呼べないことになる。

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