EXPORTHOW :: DECLARE和类角色声明

时间:2018-12-23 20:59:33

标签: perl6

我需要通过从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 :(得分:2)

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

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