fri*_*edo 5 perl moose traits lazy-evaluation
我有一个lazy_build属性的Moose类.该属性的值是另一个(非惰性)属性的函数.
假设某人为所需属性实例化了值为42的类.然后他们请求延迟属性,该属性计算为42的函数.然后,他们有勇气改变第一个属性!
懒惰的已经构建,因此不会再次调用构建器,并且lazy属性现在已过时.
我现在有一个解决方案,我在必需的属性上维护一个"脏"标志,懒惰的访问器检查脏标志并在需要时重建它.
但是,这似乎很多工作.有没有办法在Moose中处理这个问题,例如使用特征?
我的典型解决方案
has 'attr1' => (
...
trigger => \&clear_attr2,
);
Run Code Online (Sandbox Code Playgroud)
即当更新attr1时,attr2将被清除,并在下次访问时重建.clear_attr2你使用时免费提供lazy_build.只要使用访问器方法,就不需要"脏"标志.
这是一种常见的模式 - 处理'派生'属性的某种特性会很好.
| 归档时间: |
|
| 查看次数: |
789 次 |
| 最近记录: |