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

发布于 2024-10-02 06:12:41 字数 214 浏览 3 评论 0原文

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

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

如果我尝试在未设置的情况下读取此属性,我该如何承认

I have a Moose object with a non-required attribute:

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

How can I confess if I ever try to read this attribute while it's not set?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

风月客 2024-10-09 06:12:41

怎么样:

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,
);

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

How about:

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

You might want to throw in a predicate, too:

predicate => 'has_optional_attr',

so you can find out if it's set without dying.

There's also MooseX::LazyRequire, which lets you say just:

use MooseX::LazyRequire;

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

Under the hood, it uses the same trick I suggested, but it looks more elegant in your class.

七月上 2024-10-09 06:12:41

MooseX::LazyRequire 符合您的要求吗?

Would MooseX::LazyRequire fit your requirement?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文