-1. Ограничения (только для пакетов)
Метод EXPORTHOW вызывает .set_how для текущего $?LANG
добавления сленга к последнему.
Тогда add_package_declarator к MAIN
$?LANG
которой добавляется package_declarator
метод его действий и грамматике. Я думаю, это единственный «динамический сленг» (в World.nqp).
Если вы хотите перезаписать рутинный_декларатор . Затем вы должны написать сленг, имитирующий только что процитированную цепочку. Если вы согласны сохранить ключевое слово метода и сделать автоматическую подпись в классе, скажем, в соответствии с именем метода, вот способ:
Примечание. Пакет - это контейнер (пакет, грамматика, модуль, роль, ноу-хау, перечисление, класс, подмножество). Если вы поместите код внутри как метод, он будет выполнен (я только что попробовал):
0. Описание (EXPORTHOW)
Я бы использовал недокументированный EXPORTHOW и DECLARE
в модуле, потому что я не нашел пути к Phaser . Видимо, уже поздно, даже в НАЧАЛЕ.
Пример, который я привожу, украшает каждый метод в классе (даже BUILDALL
).
1. Lib ( decorator.rakumod
)
class DecoratedClassHOW is Metamodel::ClassHOW {
method add_method(Mu $obj, $name, $code_obj) {
sub wrapper ($obj, $a, $b) {
say "Before $name";
my $res = $code_obj($obj, $a, $b);
say "After $name";
return $res;
}
my $res = callwith($obj, $name, &wrapper);
return $res;
}
}
my module EXPORTHOW {
package DECLARE {
constant decorated = DecoratedClassHOW;
}
}
2. Исполняемый файл
use lib '.';
use decorator-lib;
decorated Foo {
method abc($a, $b) {
say "In abc: $a:$b";
}
}
my $f = Foo.new;
$f.abc(1, 2);
3. Выход
Before BUILDALL
After BUILDALL
Before abc
In abc: 1:2
After abc
4. Источники