我有一个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.