我有一个具有非必需属性的Moose对象:
has 'optional_attr' => (
is => 'ro',
isa => 'MyCoolType',
required => 0,
);
如果在未设置此属性的情况下尝试读取此属性,我该怎样confess
?
答案 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是否符合您的要求?