当Moose中的基础属性发生变化时,重建延迟构建的属性

时间:2010-04-25 10:00:06

标签: perl moose lazy-evaluation traits

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

假设某人为所需属性实例化了值为42的类。然后他们请求惰性属性,该属性计算为42的函数。然后,他们有勇气改变第一个属性!

懒惰的已经构建,因此不会再次调用构建器,并且lazy属性现在已过时。

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

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

1 个答案:

答案 0 :(得分:9)

我的典型解决方案:

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

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

这是一种常见的模式 - 处理'派生'属性的某种特性会很好。