我有一个lazy_build
属性的Moose类。该属性的值是另一个(非惰性)属性的函数。
假设某人为所需属性实例化了值为42的类。然后他们请求惰性属性,该属性计算为42的函数。然后,他们有勇气改变第一个属性!
懒惰的已经构建,因此不会再次调用构建器,并且lazy属性现在已过时。
我现在有一个解决方案,我在必需的属性上维护一个“脏”标志,懒惰的访问器检查脏标志并在需要时重建它。
但是,这似乎很多工作。有没有办法在Moose中处理这个问题,例如:使用特征?
答案 0 :(得分:9)
我的典型解决方案:
has 'attr1' => (
...
trigger => \&clear_attr2,
);
即。更新attr1时,attr2将被清除,并在下次访问时重建。使用clear_attr2
时,lazy_build
免费提供。只要您使用访问器方法,就不需要“脏”标志。
这是一种常见的模式 - 处理'派生'属性的某种特性会很好。