12

サブクラス化することを目的としたMooseクラスがあり、すべてのサブクラスは「execute」メソッドを実装する必要があります。ただし、すべてのサブクラスのexecuteメソッドに適用されるように、クラスのexecuteメソッドにメソッド修飾子を適用したいと思います。ただし、メソッドがオーバーライドされると、メソッド修飾子は保持されません。クラスのすべてのサブクラスに、実行メソッドにメソッド修飾子が適用されるようにする方法はありますか?

例:スーパークラスでは、次のようになります。

before execute => sub {
    print "Before modifier is executing.\n"
}

次に、そのサブクラスで:

sub execute {
    print "Execute method is running.\n"
}

executeメソッドが呼び出されると、「before」修飾子については何も言われません。

4

1 に答える 1

9

これは、augmentメソッド修飾子の目的です。これをスーパークラスに入れることができます:

sub execute {
  print "This runs before the subclass code";
  inner();
  print "This runs after the subclass code";
}

そして、サブクラスをexecute直接オーバーライドできるようにする代わりに、次のようにしますaugment

augment 'execute' => sub {
  print "This is the subclass method";
};

around基本的に、親子関係が変更されていることを除けば、修飾子と同じ機能が提供されます。

于 2011-02-11T03:38:24.347 に答える