Moose 中该功能的文档lazy_build是这样说的:
请注意,强烈建议不要使用此功能。一些文档曾经鼓励使用此功能作为最佳实践,但我们改变了主意。
然而,它没有解释这样做的原因是什么,要么我的谷歌-fu很糟糕,要么没有公开解释为什么不鼓励这样做。
是什么问题导致lazy_build今天灰心丧气呢?
这是在Moose::Manual::BestPractices中:
避免lazy_build
如上所述,您实际上很少需要更清晰的谓词或谓词。
lazy_build将两者添加到您的公共 API 中,这使您能够接触到现在必须测试的用例。最好避免添加它们,直到您真正需要它们 - 使用显式lazy和builder选项来代替。
所以它的意思是,不要使用该属性:
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方法。
| 归档时间: |
|
| 查看次数: |
218 次 |
| 最近记录: |