2016-06-30 9 views
-1

A、B、C、DをMooseクラスとします。Perlの共有基底クラスからの多重継承

はBとCの両方がまた、「複製」の特性(BとCの両方に存在するからプロパティ)でどうなるのBとC

の両方から継承DましょうA.継承してみましょうか?

+0

ペストのような多重継承を避ける。インフルエンザのような遺伝を避けてください。該当する場合は、代わりに役割を使用します。 –

答えて

2

現代のPerlMethod Dispatch Orderを見る

メソッドディスパッチ順序(またはメソッド解決順序またはMRO)は、単一の親クラスのは明らかです。メソッドを見つけたり、親を使い果たすまで、オブジェクトのクラス、次に親クラスなどを調べます。複数の親から継承するクラス(多重継承) - ホバークラフトはBoatとCarの両方を拡張しますが、よりトリッキーなディスパッチが必要です。 多重継承についての推論は複雑です。可能であれば多重継承を避けてください。(強調鉱山)

Perl 5は深さ優先メソッド解決戦略を使用しています。後続の親のクラスを検索する前に、最初に指定された親のクラスとその親の親のすべてを再帰的に検索します。 mroプラグマ(Pragmas)は、C3 MRO戦略を含む代替戦略を提供します。これは、特定のクラスの直接の親を検索してから、親を検索します。

+0

答えではありません:メソッドではなくフィールドの共有について質問します。だから(IMHO)メソッドのディスパッチオーダーは私が尋ねることではない – porton