Мне нужна роль с небольшим количеством специальных функций, реализованных через мой класс Metamodel
, унаследованный от Metamodel::ParametricRoleHOW
.Одним из способов его применения является использование черты.Но я хочу хороший синтаксический сахар, который мы можем сделать с классами:
special Mine {
...
}
Хорошо, я добавляю в свой модуль следующее:
my package EXPORTHOW {
package DECLARE {
constant special = My::Metamodel::SpecialRoleHOW;
}
}
и все работает гладко ... Нетэто не:
class Foo does Mine {
...
}
, и я получаю:
Could not instantiate role 'Mine':
Очень краткий осмотр Actions.nqp
показалэти роли имеют специальную обработку, но только и только когда ключевое слово role
используется для объявления пакета.Отсюда я делаю вывод, что единственный способ получить синтаксический сахар - это смешать мое собственное правило с основной грамматикой и смоделировать объявление роли.К счастью, package_def
опирается на $*PKGDECL
и делает возможным такое моделирование.
Прав ли я в заключении?Или существует более простой способ достижения цели?