是否可以提供有关使用MooseX :: Params :: Validate validated_hash方法和使用默认ArrayRef的一些指导?我希望它类似于使用Moose的“has”属性的声明,但它们似乎有所不同。
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。
答案 0 :(得分:2)
对于MooseX :: Params :: Validate,请使用:
default => ['blah1', 'blah2', 'blah3'],
Moose属性在这里使用coderef的原因并不真正适用于MooseX :: Params :: Validate,因此MooseX :: Params :: Validate从未支持使用coderef来生成默认值。
这可能应该更好地记录下来。