5

我有一个带有lazy_build属性的 Moose 类。该属性的值是另一个(非惰性)属性的函数。

假设有人用所需属性的值为 42 来实例化类。然后他们请求lazy属性,这个属性是42的函数。然后,他们还好意思改第一个属性!

懒惰的已经被构建了,所以构建器不会被再次调用,并且懒惰的属性现在已经过时了。

我现在有一个解决方案,我在所需属性上维护一个“脏”标志,而惰性属性上的访问器检查脏标志并在需要时重建它。

但是,这似乎需要做很多工作。有没有办法在 Moose 中处理这个问题,例如使用特征?

4

1 回答 1

9

我的典型解决方案:

has 'attr1' => (
    ...
    trigger => \&clear_attr2, 
);

即当attr1被更新时,attr2被清除,下次访问时会重建。clear_attr2使用时免费提供lazy_build。只要您使用访问器方法,就不需要“脏”标志。

这是一种常见的模式——处理“派生”属性的某种特征会很好。

于 2010-04-25T13:07:56.643 回答