如何在访问未初始化的Moose对象属性时死亡?

时间:2010-11-12 09:45:23

标签: perl moose

我有一个具有非必需属性的Moose对象:

has 'optional_attr' => (
    is       => 'ro',
    isa      => 'MyCoolType',
    required => 0,
);

如果在未设置此属性的情况下尝试读取此属性,我该怎样confess

2 个答案:

答案 0 :(得分:3)

怎么样:

lazy    => 1,
default => sub { confess "not set" },

您可能也想要引用谓词:

predicate => 'has_optional_attr',

所以你可以知道它是否已经设定而不会死亡。

还有MooseX::LazyRequire,它可以让你说:

use MooseX::LazyRequire;

has 'optional_attr' => (
    is            => 'ro',
    isa           => 'MyCoolType',
    lazy_required => 1,
);

引擎盖下,它使用了我建议的相同技巧,但在你的课堂上看起来更优雅。

答案 1 :(得分:2)

MooseX::LazyRequire是否符合您的要求?