当前位置: 首页 > 知识库问答 >
问题:

使用moose从perl中的对象数组中调用对象方法

甄文彬
2023-03-14
$VAR1 = bless( {
             'ImportID' => '22',
             'ImportTableID' => '1234',
             'ImportTable' => 'testImport'
           }, 'PostJob' );

类以这种方式实例化:


    my $postJob = PostJob->new(ImportTable => "testImport",ImportTableID => "1234", ImportID => "22");
    my @postJobs ="";
    push (@postJobs,$postJob);
    $postJob->toString(); #this works fine
    my $job = Job->new(DirectoryName => "testDir",StagingTableName => "stageTable", QBStagingTableID => "5678",postProcessJobs => \@postJobs); 
    $job->toString(); #Breaks with error above

代码如下:


    package PostJob;
    use Moose;
    use strict;
    use Data::Dumper;

    has 'ImportTable' => (isa => 'Str', is => 'rw', required => 1);
    has 'ImportTableID' => (isa => 'Str', is => 'rw', required => 1);
    has 'ImportID' => (isa => 'Str', is => 'rw', required => 1);

    sub toString {
     # Print all the values 
     my $self = shift;;
    print "Table Name for Post Job is ".$self->ImportTable."\n";
    print "Table ID for Post Job is ".$self->ImportTableID."\n";
    print "Import ID for Post Job is ".$self->ImportID."\n";
    }

    package Job;

    use strict;
    use Data::Dumper;
    use Moose;

    has 'DirectoryName' => (isa => 'Str', is => 'rw', required => 1);
    has 'StagingTableName' => (isa => 'Str', is => 'rw', required => 1);
    has 'StagingTableID' => (isa => 'Str', is => 'rw', required => 1);
    has 'postProcessJobs'=> (isa => 'ArrayRef', is => 'rw', required => 0);


    sub addPostJob {
     my ($self,$postJob) = @_;
     push(@{$self->postProcessJobs()},$postJob);

    }

    sub toString 
     {
     # Print all the values.
     my $self = shift;
     print "DUMPING JOB OBJECT CONTENTS*****************************\n";
     print "Directory is ".$self->DirectoryName."\n";
     print "Staging Table is ".$self->StagingTableName."\n";
     print "Staging Table ID is ".$self->StagingTableID."\n";

        print "DUMPING POST JOB CONTENTS*****************************\n";   
        foreach my $item (@{$self->postProcessJobs()})
            {

                $item->toString();
                print Dumper($item);
            }
        print "END DUMPING JOBS*****************************\n";    
    }


    1;

共有1个答案

司马英才
2023-03-14

问题出在以下线路上:

my @postJobs ="";

这将创建数组的第一个成员,但这个成员不是作业,它是一个空字符串。将其替换为

my @postJobs;

错误就会消失。

 类似资料:
  • 问题内容: 如何从数组中删除对象?我想删除,其中包括名称的对象从。例如: 我要实现: 问题答案: 您可以使用多种方法从数组中删除项目: 如果要删除position处的元素,请使用: 要么 您可以使用或结合使用参见MDN从数组中删除一个或多个元素,例如

  • 我有这个初始数组,希望根据和提取重复航班 我写了这个,但我只能得到第一个重复的,看起来不是很漂亮。 有什么建议吗?

  • 本文向大家介绍JavaScript中的Array 对象(数组对象),包括了JavaScript中的Array 对象(数组对象)的使用技巧和注意事项,需要的朋友参考一下  1、创建Array对象方法: --->var arr = [1,2,3];//简单的定义方法 此时可以知道 此时可以知道: 2、Array对象属性 Array常见的属性有三个:constructor、length和prototyp

  • 我正在做一个项目,我正在与返回JSON响应的第三方服务集成。我正在使用Jackson将响应反序列化为JavaPOJO。响应是一个对象,它有几个Jackson能够轻松解析的简单字段。但是响应还包含一个带有单个条目的数组,该条目也是一个对象。当Jackson尝试反序列化它时,我得到了包含列表中单个条目的顶级对象,但是列表中单个条目的所有字段都是空的。知道我在这里做错了什么吗? 更新:将FAIL\u O

  • 我知道有人问过这个问题,但我不能使用它的解决方案来做我想做的事情,我的问题是每次我从函数调用并输入一个Id,它总是告诉我Id被删除,即使我输入了一个从未输入的Id,它仍然打印相同的任何提示和帮助,将不胜感激:)注意:我不想在其中使用ArrayList这里是我的代码:

  • 问题内容: 获取包含对象的数组的索引的最佳方法是什么? 想象一下这种情况: 现在,我想拥有对象对象,该对象的属性在此示例中为。 我是JavaScript的新手,我不知道是否有一个简单的方法,或者是否应该构建自己的函数来做到这一点。 问题答案: 我认为您可以使用map函数在一行中解决它: