使用Moose构建器的子引用

时间:2016-02-01 11:58:45

标签: perl moose

Moose文档提到类definiton中属性的builder属性应该是一个字符串,其中包含将被调用以构建相关属性的函数的名称。然而,简单测试表明子参考也有效:

has 'some_attribute' => (
    is => 'ro',
    lazy => 1,
    builder => sub {
        require SomeModule::Heavy;
        return SomeModule::Heavy->new($_[0]);
    },
);

我是否遗漏了文档中的内容? builder是否正式支持使用子引用?

1 个答案:

答案 0 :(得分:1)

Moose manual说:

  

您还可以为default提供子例程参考。此引用将作为对象的方法调用。 [...]作为使用子例程引用的替代方法,您可以为属性提供builder方法。这有几个优点。首先,它将一大块代码移动到自己的命名方法,从而提高了可读性和代码组织。其次,因为这是一个命名方法,它可以被子类化或由角色提供。

因此,如果您使用builder的子程序参考,那么您将失去这些优势。我认为子程序参考作为副作用,没有实际应用。