EXPORTHOW :: DECLARE和类似角色的声明

Vad*_*man 8 perl6

我需要通过Metamodel继承自我的一类实现一些具有一些特殊功能的角色Metamodel::ParametricRoleHOW.应用它的一种方法是使用特征.但我想要一个很好的语法糖,就像我们可以用类做的那样:

special Mine {
    ...
}
Run Code Online (Sandbox Code Playgroud)

好的,我将以下内容添加到我的模块中:

my package EXPORTHOW {
    package DECLARE {
        constant special = My::Metamodel::SpecialRoleHOW;
    }
}
Run Code Online (Sandbox Code Playgroud)

一切顺利......不,不是:

class Foo does Mine {
    ...
}
Run Code Online (Sandbox Code Playgroud)

我最终得到:

Could not instantiate role 'Mine':

一个非常简短的检查Actions.nqp显示角色有特殊处理,但仅限于且仅当role关键字用于包声明时.因此,我的结论是有语法糖的唯一途径-是混入我自己的规则到主语法和模拟角色声明.幸运的是,它package_def依赖于$*PKGDECL它,这使得这种模拟成为可能.

我在结论中是对的吗?还是有一种更简单的方法来实现目标?

Vad*_*man 3

所请求的功能尚无法实现。但据我所知,乔纳森·沃辛顿正在研究从其元类派生包类型的代码。但不确定他在这方面走了多远。

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