perl - 当 Moose 中的底层属性发生变化时重建延迟构建的属性

标签 perl moose lazy-evaluation traits

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

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

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

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

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

最佳答案

我的典型解决方案:

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

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

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

关于perl - 当 Moose 中的底层属性发生变化时重建延迟构建的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2707812/

相关文章:

Perl:静态方法与包方法

perl - 修改继承的访问器并保留修饰符

perl - 将角色组合成 Moose 类不起作用

haskell - 需要帮助理解 Haskell 的惰性求值行为

python - Numpy 选择懒版本

sql - 在 SQL 中求值的情况

perl - 让 Perl 将完整的 "key path"打印到值中(Data::Dumper 不会)

perl - 从 'use fields' 杂注返回字段列表?

function - 有没有办法在 perl 中将函数声明为变量?

perl - Path::Class::File 或::Dir & Moose 初始化和强制