Moose文档提到类definiton中属性的builder
属性应该是一个字符串,其中包含将被调用以构建相关属性的函数的名称。然而,简单测试表明子参考也有效:
has 'some_attribute' => (
is => 'ro',
lazy => 1,
builder => sub {
require SomeModule::Heavy;
return SomeModule::Heavy->new($_[0]);
},
);
我是否遗漏了文档中的内容? builder
是否正式支持使用子引用?
答案 0 :(得分:1)
您还可以为
default
提供子例程参考。此引用将作为对象的方法调用。 [...]作为使用子例程引用的替代方法,您可以为属性提供builder
方法。这有几个优点。首先,它将一大块代码移动到自己的命名方法,从而提高了可读性和代码组织。其次,因为这是一个命名方法,它可以被子类化或由角色提供。
因此,如果您使用builder
的子程序参考,那么您将失去这些优势。我认为子程序参考作为副作用,没有实际应用。