私は、サブクラス化されることを意図したMooseクラスを持っており、すべてのサブクラスは "execute"メソッドを実装する必要があります。しかし、クラスのexecuteメソッドにメソッド修飾子を適用して、すべてのサブクラスのexecuteメソッドに適用するようにしたいと思います。しかし、メソッド修飾子は、メソッドがオーバーライドされても保持されません。私のクラスのすべてのサブクラスが自分のメソッド修飾子をそのexecuteメソッドに適用するようにする方法はありますか?Perl/Mooseでは、どのようにしてすべてのサブクラスのメソッドに修飾子を適用できますか?
例:そのサブクラスで、その後
before execute => sub {
print "Before modifier is executing.\n"
}
:スーパークラスでは、私はこれを持って
sub execute {
print "Execute method is running.\n"
}
executeメソッドが呼び出されると、それはについては何も言いません。 "before"修飾子。
Hmm。私のスーパークラスは実際には、サブクラスがexecuteメソッドを宣言することを期待する別の非ムースクラスを継承していることを忘れています。したがって、augment/innerは機能しません。しかし、私はこれが一般的な解決策であることに同意します。私の特定の問題については、*メソッドが*サブクラスで再定義されたりオーバーライドされたりすることがないので、単に呼び出す*メソッドに自分のモディファイアを置くことができることが分かりました。だから、私はこれを受け入れられると思います。 –
@ Ryan Thompson、私はこれを試していない、私はあなたの親と子供の間にほとんど空のMooseクラスを置くことができると思う。その後、 'hobbs'のexecuteメソッドをあなたのMooseアダプタクラスに入れ、他のすべてを継承してください。 **警告:テストされていない、試行されていない、かわいそうな人の話題が慎重に使用されています。** – daotoad
@Ryanですが、スーパークラス*は実行メソッドを宣言しています*それはクラスのサブクラスですそのサブクラスはexecuteメソッドを宣言するため、すべてがaugment/innerを使っています。ツリーのどこにメソッドが実際に追加されているかは関係ありません。 – hobbs