[Moscow.pm] Moose | Mouse вопрос
Матюхин Вячеслав
me на berekuk.ru
Сб Июл 14 04:13:06 PDT 2012
Наверное, самый простой способ — не нарушать стандартную конвенцию "new всегда возвращает объект", а сделать отдельный метод.
sub try_new {
my $class = shift;
return undef unless $condition;
return $class->new(@_);
}
my $obj_or_undef = Foo->try_new(...);
14.07.2012, 14:24, "Ivan Petrov" <i.petro.77.00 на gmail.com>:
> есть нужда создать "мягкий" вариант конструктора, который будет
> возвращать 'undef' в случае неудачи.
>
> во всех хауту по Mouse/Moose пишут "не переопределяйте new"
>
> соответственно если пытаться сделать это в BUILDARGS
>
> sub BUILDARGS {
> my $class = shift;
>
> ..
>
> return undef unless $condition;
>
> return {
> abc => 'cde',
> cde => ...
> }
> }
>
> то Mouse ругается что не хеш мы возвращаем
>
> c другой стороны определив new
>
> sub new {
> my ($class, @args) = @_;
> ...
> return undef unless $condition;
> return $self->SUPER::new({ abc => 'cde', cde => ... });
> }
>
> я добиваюсь чего хочу, но на такой пакет нелья поставить
> make_immutable поскольку мой new оно заменит своим
>
> выбрасывать исключение в BUILDARGS я не хочу, хочу вернуть undef.
>
> как правильно поступить?
>
> --
> Moscow.pm mailing list
> moscow-pm на pm.org | http://moscow.pm.org
Подробная информация о списке рассылки Moscow-pm