perl 为什么不鼓励使用Moose中的“lazy_build”功能?

watbbzwu  于 2022-11-15  发布在  Perl
关注(0)|答案(1)|浏览(138)

Moose中lazy_build特性的文档中这样写道:

**请注意,强烈建议不要使用此功能。**某些文档曾鼓励将此功能作为最佳实践使用,但我们现在改变了主意。

然而,它并没有解释这是什么原因,要么我的谷歌福是可怕的,要么没有公开解释为什么这是不鼓励的。
lazy_build有什么问题让它今天不受欢迎?

5sxhfpxr

5sxhfpxr1#

这在Moose::Manual::最佳实践:

避免延迟建置

如上所述,你很少需要一个clearer或predicate。lazy_build将这两者都添加到了你的公共API中,这将使你暴露于你现在必须测试的用例中。最好在你真正需要它们之前避免添加它们--使用显式的lazybuilder选项。
所以它说的不是使用属性:

has attribute => (
  ...,
  lazy_build => 1, # creates a builder called _build_attribute
);

你应该更明确地说:

has attribute => (
  ...,
  lazy => 1,
  builder => '_build_attribute',
);

因为这不会隐式添加clearerpredicate方法。

相关问题