如何监视属性的变化? (如更改/ of /属性所述)

时间:2018-08-13 17:22:44

标签: perl attributes moose

通常,我使用保存对象集合的Perl / Moose属性。我知道可以监视整个属性是否已设置。在这种情况下,可以使用trigger。这样还可以监视属性中的对象。但是如何监视收藏?如果属性为-例如-对象数组,是否可以监视是否添加了对象?

我要寻找的是一种method modifier,例如“ before”或“ around”,用于在属性上调用诸如push或shift之类的内置函数时。这将为非常通用的解决方案提供解决方案,例如仅在发生更改时保存。

1 个答案:

答案 0 :(得分:2)

push这样的操作不是在属性本身上执行的,而是在该属性所引用的数组对象上执行的。

因此,观察此类操作的唯一可靠方法是从该数组对象中进行–通过tie将其分配到适当的类。但这是Perl的黑魔法,通常是不可取的(速度慢,难以正确执行,可能会暴露其他模块中的错误,并且级别很低)。

通常更好的方法是选择停止公开数组引用的设计。例如。您可以提供一种方法push @{ $foo->attribute }, 42来代替$foo->push_attribute(42)。通过这种方法,您可以实现所需的任何钩子。