Perl:“validate”函数中应该为类对象使用什么类型

时间:2010-12-21 13:53:30

标签: perl validation

我想在构造函数中传递名为“A”的类对象的引用。并使用“验证”功能进行检查。

像那样:

test1.pm

my $object = Object1->new;

my $newObject = Object2->new({
    param1 => $object,
});

test2.pm

sub new {
    my $class = shift;

    my (%options) = validate (@_, {
        param1 => { type => SCALARREF, default => undef},
    });
    ...
}

我不确定参数param1的类型的问题。我尝试了“OBJECT”和“SCALARREF”,但是有一些错误,比如“在严格的sub下不允许使用SCALARREF”。

我应该使用哪种类型?

1 个答案:

答案 0 :(得分:2)

看起来你正试图在这里做一个准Moose的事情。但是在Moose中,你不会创建new个潜艇,因为Moose会为你做到这一点。如果您需要任何内容​​ - 您可以创建一个BUILD子。

Perl(5)基础对象系统不像Moose那样工作,所以'SCALARREF'或者你在Perl基础上做的是什么。

  • 您是否意识到您正在将hashref传递给new
  • 你是否意识到vaildate正在获得两个hashrefs? validate( {}, {} )

如果没有定义SCALARREF,它将永远是一个单词。

阅读Moose。您可以从Moose Types Manual开始,查看ScalarRef的使用方式,但由于您甚至没有显示“use Moose”,因此您应该从Manual的第1页开始}。