Как умереть при доступе к неинициализированному атрибуту объекта Moose? - PullRequest
1 голос
/ 12 ноября 2010

У меня есть объект Moose с необязательным атрибутом:

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

Как мне confess, если я когда-нибудь попытаюсь прочитать этот атрибут, пока он не установлен?

Ответы [ 2 ]

3 голосов
/ 12 ноября 2010

Как насчет:

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

Под капотом используется тот же трюк, который я предложил, но в вашем классе он выглядит более элегантно.

2 голосов
/ 12 ноября 2010

Будет ли MooseX :: LazyRequire соответствовать вашим требованиям?

...