【问题标题】:Using sub reference with Moose builder使用 Moose builder 的子参考
【发布时间】:2016-02-03 02:23:41
【问题描述】:

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

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

我错过了文档中的某些内容吗? builder 是否正式支持子引用的使用?

【问题讨论】:

标签: perl moose


【解决方案1】:

Moose manual 说:

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

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

【讨论】:

  • 是的,似乎就是这样,尽管我认为使用任意伪私有命名函数污染包命名空间是否是一种“优势”。子类/角色仍然需要检查你的类,因为它无法可靠地猜测你如何命名你的构建器,它可以很容易地替换 default
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-17
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 2012-09-03
  • 1970-01-01
相关资源
最近更新 更多