Perl MooseX::Params::Validate,默认ArrayRef

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,

关于使用MooseX::Params::Validate validated_散列方法和使用默认ArrayRef,有什么可以提供一些指导吗?我希望它与使用驼鹿的“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。

对于MooseX::Params::Validate,使用:

default    => ['blah1', 'blah2', 'blah3'],
Moose属性在这里使用coderef的原因并不真正适用于MooseX::Params::Validate,因此MooseX::Params::Validate从未支持使用coderef生成默认值


这可能需要更好的记录。

感谢您的澄清!代码现在已修复!