perl – Moose :: Role – 增加角色应用的简单方法?

前端之家收集整理的这篇文章主要介绍了perl – Moose :: Role – 增加角色应用的简单方法?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我有一个Moose :: Role,当该角色应用于类时,我想在类上调用一些额外的subs.

有没有一种简单的方法修改应用角色时会发生什么,而不必过多地挖掘Moose :: Meta :: Role类型编码?理想情况下,我只想在’apply’=>之后…添加额外的东西.

编辑:

我特意使用它与DBIx :: Class :: Core结果定义来创建类似于也修改构造函数的组件.如果我可以在BUILDARGS和BUILD subs获得结果,我会把它写成一个组件,但我似乎无法做到.因此,我没有使用load_component,而是使用’role’,但组件的一些效果是将belongs_to关系添加到类中.因此,我认为最好的方法是在将角色应用到班级期间.

解决方法

在一篇简短的评论中,我向您推荐了 this question,其中讨论了如何访问角色所应用的类的元类(例如,这样您可以有条件地构建到类上).但是,这是一个非常糟糕的使用MooseX :: Role :: Parameterized为您提供的信息,如果角色被应用于另一个角色而不是类,它也将无法工作.

作为替代方案,您可以编写一个接收元信息的糖函数,并以这种方式构建到类上:

sub foo
{
     my ($Meta,%options) = @_;

     # based on what is present in %options,add additional attributes...
     $Meta->add_attribute(...);
}

有关编写糖函数的示例,请参见Moose::Cookbook::Extending::Recipe4.

猜你在找的Perl相关文章