EXPORTHOW :: ОБЪЯВЛЕНИЕ и ролевая декларация - PullRequest
0 голосов
/ 23 декабря 2018

Мне нужна роль с небольшим количеством специальных функций, реализованных через мой класс 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 и делает возможным такое моделирование.

Прав ли я в заключении?Или существует более простой способ достижения цели?

1 Ответ

0 голосов
/ 25 марта 2019

Запрошенная функциональность пока невозможна.Но AFAIK, Джонатан Уортингтон работает над кодом, который выведет тип пакета из своего метакласса.Не уверен относительно того, как далеко он на этом.

Между тем, желаемая функциональность может быть достигнута посредством расширения времени выполнения грамматики Perl 6.Я сделал это для OO :: Plugin модуля.

...