RFC: Type::Params용 새 API
Type::Params용 API는 현재 다음과 같습니다.
use feature 'state';
use Type::Params qw( compile compile_named_oo );
use Types::Standard -types;
sub function_with_positional_parameters {
state $check = compile( ArrayRef, Int, Int );
my ( $list, $start, $end ) = $check->( @_ );
my @slice = @{$list}[ $start .. $end ];
return \@slice;
}
sub function_with_named_parameters {
state $check = compile_named_oo( list => ArrayRef, start => Int, end => Int );
my ( $arg ) = $check->( @_ );
my @slice = @{$arg->list}[ $arg->start .. $arg->end ];
return \@slice;
}
또는 다음이 있습니다.
use Type::Params qw( wrap_subs compile_named_oo );
use Types::Standard -types;
wrap_subs function_with_positional_parameters => [ ArrayRef, Int, Int ];
sub function_with_positional_parameters {
my ( $list, $start, $end ) = @_;
my @slice = @{$list}[ $start .. $end ];
return \@slice;
}
wrap_subs function_with_named_parameters =>
compile_named_oo( list => ArrayRef, start => Int, end => Int );
sub function_with_named_parameters {
my ( $arg ) = @_;
my @slice = @{$arg->list}[ $arg->start .. $arg->end ];
return \@slice;
}
내가 제안하는 API는 다음과 같습니다.
use feature 'state';
use Type::Params2;
use Types::Standard -types;
sub function_with_positional_parameters {
state $check = signature(
pos => [ ArrayRef, Int, Int ],
);
my ( $list, $start, $end ) = $check->( @_ );
my @slice = @{$list}[ $start .. $end ];
return \@slice;
}
sub function_with_named_parameters {
state $check = signature(
named => [ list => ArrayRef, start => Int, end => Int ],
);
my ( $arg ) = $check->( @_ );
my @slice = @{$arg->list}[ $arg->start .. $arg->end ];
return \@slice;
}
인사이드 아웃 기술도 지원합니다.
use Type::Params2;
use Types::Standard -types;
signature_for function_with_positional_parameters => (
pos => [ ArrayRef, Int, Int ],
);
sub function_with_positional_parameters {
my ( $list, $start, $end ) = @_;
my @slice = @{$list}[ $start .. $end ];
return \@slice;
}
signature_for function_with_named_parameters => (
named => [ list => ArrayRef, start => Int, end => Int ],
);
sub function_with_named_parameters {
my ( $arg ) = @_;
my @slice = @{$arg->list}[ $arg->start .. $arg->end ];
return \@slice;
}
방법에 대한 바로 가기가 있습니다.
signature_for method_with_named_parameters => (
method => 1,
named => [ list => ArrayRef, start => Int, end => Int ],
);
sub method_with_named_parameters {
my ( $self, $arg ) = @_;
my @slice = @{$arg->list}[ $arg->start .. $arg->end ];
return \@slice;
}
코멘트? 사람들이 이것이 개선될 것이라고 생각합니까?
Reference
이 문제에 관하여(RFC: Type::Params용 새 API), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/tobyink/rfc-new-api-for-typeparams-39oo텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)