[Moscow.pm] Moose | Mouse вопрос

Alexandr Alexeev afiskon на gmail.com
Вс Июл 15 23:23:30 PDT 2012


Насколько я знаю, бросать исключения в new() считается плохой практикой во
всех языках. Если объект построен не до конца, значит его нельзя ни
использовать (по понятным причинам), ни уничтожить (потому что он не был
инициализирован должным образом и может содержать указатели в никуда и тп).

Возможно, вам следует подумать получше над интерфейсом. Например, вы можете
использовать что-то вроде фабрики, которая перед созданием объекта
проверяет все аргументы и вызывает конструктор только в том случае, если
все они верны.

14 июля 2012 г., 15:13 пользователь Матюхин Вячеслав <me на berekuk.ru>написал:

> Наверное, самый простой способ — не нарушать стандартную конвенцию "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 mailing list
> moscow-pm на pm.org | http://moscow.pm.org
>



-- 
С уважением, Александр
Личный блог: http://eax.me/
Мой форум: http://it-talk.org/
Мой Twitter: http://twitter.com/afiskon
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mail.pm.org/pipermail/moscow-pm/attachments/20120716/6e6e0f17/attachment.html>


Подробная информация о списке рассылки Moscow-pm