我需要通过从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
,这使得这种模拟成为可能。
我的结论正确吗?或更简单的方法可以实现目标?
答案 0 :(得分:2)
请求的功能尚无法实现。但是AFAIK,Jonathan Worthington正在研究从其元类派生包类型的代码。虽然不确定他要走多远。
同时,可以通过扩展Perl 6语法的运行时间来实现所需的功能。我已经完成了OO::Plugin模块的工作。