Answers:
采用 wrap
sub bar () { return "baþ" };
my $wrapped = &bar.wrap( { " → " ~ callsame() ~ " ← " } );
say bar(); # OUTPUT: «→ baþ ← »
由于方法是例程,因此您需要一种稍微复杂的方法来获取方法本身的句柄,但除此之外,该方法完全相同,因为Method
s是s的子类Routine
。
class Baz {
method bar () { return "baþ" };
}
my &method_bar = Baz.^find_method("bar");
my $wrapped = &method_bar.wrap( { " → " ~ callsame() ~ " ← " } );
say Baz.bar(); # OUTPUT: «→ baþ ← »
该$wrapped
是可以使用的,以后,如果需要的话解开它的手柄。
编辑:添加代码以获取类方法的句柄,例如,从此处获取。
Method
是一个Routine
Moo
s就像包装一个子程序一样。