Moose types이 우수하지만 때로는 좀 더 구체적이어야합니다. 이 데이터 형식 규칙은 모두 'A'
, 'B'
또는 'C'
이거나 통화 기호 만 있거나 일부 정규 표현식을 준수해야합니다.무스 (Moose) 유형에 특정 검사를 적용하면
두 개의 제한된 특성을 갖는 다음 예제를 참조하십시오. 하나는 'm'
또는 'f'
이어야하며 다른 하나는 유효한 ISO 날짜 여야합니다. 이러한 제약 조건을 지정하기위한 무스의 가장 좋은 방법은 무엇입니까? 나는 SQL CHECK
절을 생각 하겠지만 AFAICS에는 무스에 check
키워드가 없습니다. 그래서 trigger
을 사용했지만 잘못 들었습니다. 누구든지 더 좋은 대답을 갖고 있습니까?
package Person;
use Moose;
has gender => is => 'rw', isa => 'Str', trigger =>
sub { confess 'either m or f' if $_[1] !~ m/^m|f$/ };
has name => is => 'rw', isa => 'Str';
has dateOfBirth => is => 'rw', isa => 'Str', trigger =>
sub { confess 'not an ISO date' if $_[1] !~ m/^\d\d\d\d-\d\d-\d\d$/ };
no Moose;
__PACKAGE__->meta->make_immutable;
package main;
use Test::More;
use Test::Exception;
dies_ok { Person->new(gender => 42) } 'gender must be m or f';
dies_ok { Person->new(dateOfBirth => 42) } 'must be an ISO date';
done_testing;
는 여기에 내가 사용하여 상처 내용은 다음과 같습니다
package Blabla::Customer;
use Moose::Util::TypeConstraints;
use Moose;
subtype ISODate => as 'Str' => where { /^\d\d\d\d-\d\d-\d\d$/ };
has id => is => 'rw', isa => 'Str';
has gender => is => 'rw', isa => enum ['m', 'f'];
has firstname => is => 'rw', isa => 'Str';
has dateOfBirth => is => 'rw', isa => 'ISODate';
no Moose;
__PACKAGE__->meta->make_immutable;
이이 중요한 경우에, 무스 버전 1.19입니다. 에 대해 다음과 같은 경고가 나타납니다.subtype as => 'Str', where => { ... }
구문을 잘못 입력했습니다. Calling subtype() with a simple list of parameters is deprecated
. 그래서 나는 훌륭한 매뉴얼에 따라 조금 바꿔야 만했다.
** 답변 : ** 자신 만의 유형을 사용하십시오. –