Drkcore

10 10 2006 perl Tweet

Mixinとpackage

Class::DBI::Loader::Relationshipが便利そうなので、ドキュメント眺めてたら、

Class::DBI::Loader::Relationship - Easier relationship specification in CDBI::L - search.cpan.org

This module acts as a mix-in, adding the relationship method to Class::DBI::Loader.

とかいう記述があったので、何してるんだろかとソース眺め。

結局Class::DBI::Loader::Relationship自体は何もしてナイっぽくて、Class::DBI::Loader::Genericの名前空間でrelationshipメソッドが記述されてた。

うーんpackageって同じ名前空間を複数回宣言していいのか?と不思議だったので、試したのが以下のコード。

package A;

sub a1_test { print "a_1\n";}
sub a2_test { print "a_2\n";}

1;
package B;

sub b1_test { print "b_1\n";}
sub b2_test { print "b_2\n";}

1;
package C;

sub c1_test { print "c_1\n";}
sub c2_test { print "c_2\n";}

1;
package A;

sub a3_test { print "a_3\n";}

1;

package Main;

A::a1_test();
B::b1_test();
C::c2_test();
A::a3_test();

で、実行。果たしてa3_testは呼び出されるんだろうか?

$ perl packtest.pl
a_1
b_1
c_2
a_3

うーん、これでもいいのね。

ただmix-inに関してはどっかから借りてくるのをmix-inって呼ぶのかナァと漠然と感じていたので、こういうやり方をmix-inと呼ぶのが, アイスクリームにアイスクリームを混ぜ込んでるみたいで、ちょっと不思議な感じがするんだよなぁ。

About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021