我需要通过继承自Metamodel的我的Metamodel::ParametricRoleHOW类实现一些特殊功能。一种应用方式是使用特征。但是我想要一个很好的语法糖,就像我们可以对类进行处理一样:

special Mine {
    ...
}

好的,我将以下内容添加到我的模块中:
my package EXPORTHOW {
    package DECLARE {
        constant special = My::Metamodel::SpecialRoleHOW;
    }
}

一切运行顺利...不,不是:
class Foo does Mine {
    ...
}

我最终得到:



Actions.nqp进行的非常简短的检查显示,角色具有特殊的处理方式,但仅当且仅当role关键字用于程序包声明时才使用。因此,我得出结论,拥有语法糖的唯一方法是将自己的规则混入主语法并模拟角色声明。幸运的是,package_def依赖于$*PKGDECL,这使得这种模拟成为可能。

我的结论正确吗?还是存在一种更简单的方法来实现目标?

最佳答案

请求的功能尚无法实现。但是AFAIK,乔纳森·沃辛顿(Jonathan Worthington)正在研究可从其元类派生包类型的代码。虽然不确定他要走多远。

同时,可以通过扩展Perl 6语法的运行时间来实现所需的功能。我已经完成了OO::Plugin模块。

10-04 12:09