Лось, как ты делаешь принудительный огонь на каждом входе? - PullRequest
2 голосов
/ 14 декабря 2011

У меня есть атрибут, и я хотел бы заставить принудительное срабатывание при каждом входном значении. До 0,72 это было сделано путем принуждения Str от Str. Когда эта функция была удалена, я прибег к жесткому взлому файла Meta::TypeConstraint, чтобы рабочий код работал. С момента выпуска Moose 2.0

Раньше я просто вносил это изменение, комментируя return $_[0] if $self->check($_[0]);

sub coerce {
    my $self = shift;

    my $coercion = $self->coercion;

    unless ($coercion) {
        require Moose;
        Moose->throw_error("Cannot coerce without a type coercion");
    }

    #return $_[0] if $self->check($_[0]);

    return $coercion->coerce(@_);
}

Однако сделать то же самое изменение в Moose v2 не получится. Я использую эту функцию для полей, которые, как я знаю, я хочу очистить с помощью регулярных выражений. Однако не имеет смысла проверять, соответствуют ли они, потому что (почти) ни один из них не будет соответствовать. Я использую этот метод для простых вещей, таких как выполнение регулярного выражения в строке или переформатирование строки (которая может представлять денежную запись в реальном мире для чего-то, что может использовать БД).

1 Ответ

0 голосов
/ 19 декабря 2011

Единственная причина, из-за которой я хочу, чтобы принуждения срабатывали на каждом входе, заключается в том, что вы используете принуждения для их побочных эффектов, и в этом случае я отсылаю вас к шутке доктора заслуженного времени:

Пациент: Доктор, мне больно.
Доктор: Ну, тогда не делай этого.

Я понимаю, что вам, вероятно, нужно исправить много кода, но я не сомневаюсь, что в конце вы получите более чистый код.

...