Допустим, я использую определенный набор шаблонов довольно регулярно:
class Foo {
method abc($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
method xyz($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
method blarg($a: $b, $c, +@d) is pure {
use Slang::Bar;
…
}
}
Я бы предпочел просто сказать:
class Foo is/does Bar {
bar abc { … }
bar xyz { … }
bar blarg { … }
}
И где-то в Bar, установите объявление для bar (или, поскольку класс Foo сам в конечном итоге будет использовать свой собственный декларатор, он может пойти куда-нибудь еще и его не нужно извлекать в отдельный тип). Как бы я поступил так?
Ответы:
-1. Ограничения (только для пакетов)
Метод EXPORTHOW вызывает .set_how для текущего
$?LANG
добавления сленга к последнему.Тогда add_package_declarator к
MAIN
$?LANG
которой добавляетсяpackage_declarator
метод его действий и грамматике. Я думаю, это единственный «динамический сленг» (в World.nqp).Если вы хотите перезаписать рутинный_декларатор . Затем вы должны написать сленг, имитирующий только что процитированную цепочку. Если вы согласны сохранить ключевое слово метода и сделать автоматическую подпись в классе, скажем, в соответствии с именем метода, вот способ:
Примечание. Пакет - это контейнер (пакет, грамматика, модуль, роль, ноу-хау, перечисление, класс, подмножество). Если вы поместите код внутри как метод, он будет выполнен (я только что попробовал):
0. Описание (EXPORTHOW)
Я бы использовал недокументированный EXPORTHOW и
DECLARE
в модуле, потому что я не нашел пути к Phaser . Видимо, уже поздно, даже в НАЧАЛЕ.Пример, который я привожу, украшает каждый метод в классе (даже
BUILDALL
).1. Lib (
decorator.rakumod
)2. Исполняемый файл
3. Выход
4. Источники
for $_.HOW.method_table($_)
созданием нового хэша, перезаписывающего кэш метода с (хорошо названным)nqp::setmethcache
.источник