Moose中lazy_build特性的文档中这样写道:
lazy_build
**请注意,强烈建议不要使用此功能。**某些文档曾鼓励将此功能作为最佳实践使用,但我们现在改变了主意。
然而,它并没有解释这是什么原因,要么我的谷歌福是可怕的,要么没有公开解释为什么这是不鼓励的。lazy_build有什么问题让它今天不受欢迎?
5sxhfpxr1#
这在Moose::Manual::最佳实践:
避免延迟建置
如上所述,你很少需要一个clearer或predicate。lazy_build将这两者都添加到了你的公共API中,这将使你暴露于你现在必须测试的用例中。最好在你真正需要它们之前避免添加它们--使用显式的lazy和builder选项。所以它说的不是使用属性:
lazy
builder
has attribute => ( ..., lazy_build => 1, # creates a builder called _build_attribute );
你应该更明确地说:
has attribute => ( ..., lazy => 1, builder => '_build_attribute', );
因为这不会隐式添加clearer和predicate方法。
clearer
predicate
1条答案
按热度按时间5sxhfpxr1#
这在Moose::Manual::最佳实践:
避免延迟建置
如上所述,你很少需要一个clearer或predicate。
lazy_build
将这两者都添加到了你的公共API中,这将使你暴露于你现在必须测试的用例中。最好在你真正需要它们之前避免添加它们--使用显式的lazy
和builder
选项。所以它说的不是使用属性:
你应该更明确地说:
因为这不会隐式添加
clearer
和predicate
方法。