我需要通过继承自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
,它使这种模拟成为可能。
我在结论中是对的吗?还是有一种更简单的方法来实现目标?
请求的功能尚不可用。但AFAIK,Jonathan Worthington正致力于从其元类中获取包类型的代码。不知道他在这方面有多远。
同时,可以通过Perl 6语法的运行时延长来实现所需的功能。我为OO::Plugin模块完成了它。