我需要通过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它,这使得这种模拟成为可能.
我在结论中是对的吗?还是有一种更简单的方法来实现目标?
所请求的功能尚无法实现。但据我所知,乔纳森·沃辛顿正在研究从其元类派生包类型的代码。但不确定他在这方面走了多远。
同时,可以通过Perl 6语法的运行时扩展来实现所需的功能。我已经为OO::Plugin模块完成了它。