Perl MooseX::Params::Validate,默认ArrayRef
关于使用MooseX::Params::Validate validated_散列方法和使用默认ArrayRef,有什么可以提供一些指导吗?我希望它与使用驼鹿的“has”属性的声明类似,但它们似乎有所不同Perl MooseX::Params::Validate,默认ArrayRef,perl,moose,Perl,Moose,关于使用MooseX::Params::Validate validated_散列方法和使用默认ArrayRef,有什么可以提供一些指导吗?我希望它与使用驼鹿的“has”属性的声明类似,但它们似乎有所不同 use Moose; use MooseX::Params::Validate; use Data::Dumper; has 'arg1' => ( is => 'ro', isa => 'ArrayRef[Str]', lazy => 1,
use Moose;
use MooseX::Params::Validate;
use Data::Dumper;
has 'arg1' => (
is => 'ro',
isa => 'ArrayRef[Str]',
lazy => 1,
default => sub { return ['blah1', 'blah2', 'blah3'] },
reader => 'get_arg1'
);
sub testsub {
my $self = shift;
my %args = validated_hash(
\@_,
arg1 => {
is => 'rw',
isa => 'ArrayRef[Str]',
required => 0,
default => sub {return ['blah1', 'blah2', 'blah3']}
}
);
print Dumper($args{'arg1'});
return 0;
}
no Moose;
__PACKAGE__->meta->make_immutable;
1;
运行testsub方法将返回:
$VAR1 = sub { "DUMMY" };
如果我将方法更改为使用Moose属性:
arg1 => {
is => 'rw',
isa => 'ArrayRef[Str]',
required => 0,
default => $self->get_arg1}
}
然后输出预期的ArrayRef内容:
$VAR1 = [
'blah1',
'blah2',
'blah3'
];
目标是最终使“testsub”方法成为Moose::Role。对于MooseX::Params::Validate,使用:
default => ['blah1', 'blah2', 'blah3'],
Moose属性在这里使用coderef的原因并不真正适用于MooseX::Params::Validate,因此MooseX::Params::Validate从未支持使用coderef生成默认值
这可能需要更好的记录。感谢您的澄清!代码现在已修复!