我理解使用builderenable子类可以轻松覆盖属性默认值,角色可以覆盖require它们.这也可以使用default如下方式完成:
has 'foo' =>
is => 'rw',
isa => 'Str',
default => sub { $_[0]->_build_foo };
Run Code Online (Sandbox Code Playgroud)
我想知道使用builder我还没有进一步的优势吗?我自己想出了一些:
builder是声明性的,所以你可以反省foo内置_build_foobuilder 消除了子程序包装,使其更快一些builder允许使用有用的lazy_build.UPDATE 为了澄清,这是不是defaultVS builder一般,但default => sub { $_[0]->_build_foo }VS builder => '_build_foo'.
hob*_*bbs 12
我想你已经回答了自己的问题.使用builder允许后期绑定,它可以很好地与要创建子类的角色和类一起使用.如果构建器很长,它也很有价值 - 我从不default在属性定义中添加超过一行.没有真正的功能差异; default可以很容易地模仿builder,但结果不是很漂亮.
| 归档时间: |
|
| 查看次数: |
5293 次 |
| 最近记录: |