Использование wrap
sub bar () { return "baþ" };
my $wrapped = &bar.wrap( { " → " ~ callsame() ~ " ← " } );
say bar(); # OUTPUT: «→ baþ ← »
Поскольку методы являются подпрограммами, вам понадобится немного более сложный способ получить представление о самом методе, но кроме этого,метод точно такой же, поскольку Method
s являются подклассом Routine
s
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
- это дескриптор, который можетпозже будет использоваться, чтобы развернуть его, если необходимо.
Редактировать : добавить код, чтобы получить дескриптор метода класса, взятый из здесь , дляэкземпляр.