【问题标题】:Display data from an array of objects显示对象数组中的数据
【发布时间】:2011-07-03 03:12:04
【问题描述】:

我正在尝试显示使用另一家公司的 API 获得的对象数组中的数据,但是当我尝试使用 foreach 循环时出现错误。

我正在使用 Dumper 来显示数组中的所有内容。

print Dumper($object);

Dumper 的部分输出:

'enable_dha_thresholds' => '假', '成员' => [ 祝福({ 'ipv4addr' => '192.168.1.67', 'name' => 'name.something.com' }, 'Something::Network::Member' ), 祝福({ 'ipv4addr' => '192.168.1.68', 'name' => 'name.something.com' }, 'Something::Network::Member' ) ], '评论' => '这是评论',

我正在尝试提取看起来是双数组的“成员”:

//this works    
print $members->enable_dha_thresholds(); 

//this works
print $members[0][0]->ipv4addr; 

//does not work
foreach my $member ($members[0]){
     print "IP". $member->ipv4addr()."\n";  
}

我收到此错误: 无法在 ./script.pl 第 12 行的 unblessed 引用上调用方法“ipv4addr”。

我不确定我是否完全理解 Perl 中的“blessed”与“unblessed”,因为我是该语言的新手。

【问题讨论】:

    标签: perl data-dumper


    【解决方案1】:

    打印 $members[0][0]->ipv4addr; //这 作品

    所以 $members[0] 是一个数组引用。
    您必须取消对数组的引用:

    foreach my $member ( @{ $members[0] } ){
        print "IP". $member->ipv4addr()."\n";  
    }
    

    引用“unblessed reference”的错误表明您没有使用对象;而是您提供一个数组引用,这不一样:)

    HTH, 保罗

    【讨论】:

    • 谢谢,这正是我想要的。
    【解决方案2】:

    这是“数组引用”与“数组”的问题。 $members[0] 是一个数组引用; foreach 运算符适用于数组(或列表,是迂腐的)。你会想说

    foreach my $member ( @{$members[0]} ) { ...
    

    遍历$members[0] 引用的元素。

    语法很复杂,你可能会在使用这些东西的过程中犯更多错误。 perlref(或 perlreftut)、perllol 以及 perldscperlobj 中的相关文档可帮助您快速了解相关文档。


    顺便说一句,“blessed”意味着引用“知道”它是什么类型的对象以及它应该查看什么包以查看它可以运行哪些方法。当您收到“unblessed reference”警告或错误时,这通常意味着您在某个预期对象的地方传递了不是对象的东西——在这种情况下,$members[0] 是 unblessed 引用,而您打算传递祝福引用 @ 987654336@、$members[0][1]

    【讨论】:

      猜你喜欢
      • 2019-12-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 1970-01-01
      • 2014-02-06
      • 1970-01-01
      相关资源
      最近更新 更多