为什么 Moose 中的“lazy_build”功能不被鼓励?

Wou*_*lst 6 perl moose

Moose 中该功能的文档lazy_build是这样说的:

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

然而,它没有解释这样做的原因是什么,要么我的谷歌-fu很糟糕,要么没有公开解释为什么不鼓励这样做。

是什么问题导致lazy_build今天灰心丧气呢?

Dav*_*oss 5

这是在Moose::Manual::BestPractices中:

避免lazy_build

如上所述,您实际上很少需要更清晰的谓词或谓词。lazy_build将两者添加到您的公共 API 中,这使您能够接触到现在必须测试的用例。最好避免添加它们,直到您真正需要它们 - 使用显式lazybuilder选项来代替。

所以它的意思是,不要使用该属性:

has attribute => (
  ...,
  lazy_build => 1, # creates a builder called _build_attribute
);
Run Code Online (Sandbox Code Playgroud)

相反,你应该更明确:

has attribute => (
  ...,
  lazy => 1,
  builder => '_build_attribute',
);
Run Code Online (Sandbox Code Playgroud)

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