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

时间:2014-02-28 13:59:47

标签: perl moose

是否可以提供有关使用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。

1 个答案:

答案 0 :(得分:2)

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

default    => ['blah1', 'blah2', 'blah3'],

Moose属性在这里使用coderef的原因并不真正适用于MooseX :: Params :: Validate,因此MooseX :: Params :: Validate从未支持使用coderef来生成默认值。

这可能应该更好地记录下来。