【发布时间】:2010-10-31 17:37:44
【问题描述】:
我有一个Moose::Role,当该角色应用于班级时,我想在班级上调用一些额外的 subs。
是否有一种简单的方法可以修改应用角色时发生的情况,而不必深入研究Moose::Meta::Role 类型编码?理想情况下,我只想 after 'apply' => ... 添加额外的东西。
编辑:
我专门将它与DBIx::Class::Core 结果定义一起使用来创建类似组件的东西,它也修改了构造函数。如果我能得到BUILDARGS 和BUILD 的结果,我会把它写成一个组件,但我似乎做不到。所以,我不是做load_component,而是做with 'role',但是组件的一些作用是给类添加belongs_to关系。因此,我认为最好的方法是在将角色应用到班级期间。
【问题讨论】:
-
你能澄清一下你想做什么吗?你会在你假设的
after 'apply'sub 中加入什么?这种对 MOP 的修改通常不会进行,因此几乎可以肯定有一种更简单的方法可以完成您想做的事情。 -
@Ether:当然,编辑了更多解释。
-
你试过
after BUILD => sub { ... }担任你的角色吗? -
@Ether:是的,这是可行的——这就是我作为一个角色来做这件事的原因。然而,一些可以在组件中完成的事情我似乎无法在角色中完成(比如添加关系)。目前,我已经编写了一个组件,除了做组件化的事情之外,它还加载了角色——但这看起来很傻。它应该都在一个地方。