-2

我发现了一些非常令人困惑的事情

我曾经有一个带有各种指令的方法,结果如下:

    $self->save;
    $object1->save;
    for my $action (@{$self->actions}) {
         $action->save;
     }
    return $self;

我将其更改为:

return if !$self->save;
return if defined $object1 && !$object1->save;
for my $action (@{$self->actions}) {
    return if !$action->save;
}
return $self;

第一个版本一直运行到最后一行。在第二个版本中,我从未到达最后一行。我没有修改整个系统中的任何其他内容。我究竟做错了什么?

更新1:

注意

    return if !$self->save;            
    return if defined $object1 && !$object1->save;

    for my $action (@{$self->actions}) {
           $action->save;
    }          
    return $self;

也提前结束。

更新2:

$对象1

   my $object1 = $self->get_chosen;

执行以下操作:

 sub get_chosen {
     my ($self) = @_;
     my $chosen_id = $self->_get_chosen_id;
     return undef if !defined $chosen_id;
     my ($chosen)
        = grep { $_->id eq $chosen_id } @{ $self->members };
     return $chosen;
 }
4

2 回答 2

2

当您调用 时$action->save,您的一个实例正在返回一个错误值。

于 2013-09-12T09:30:08.910 回答
0

作为记录。我仍然不知道为什么代码部分 2 提前返回但如果我改变

  return if defined $object1 && !$object1->save;

为了

  return if ($object1 && !$object1->save);

提前返回错误消失了。

于 2013-09-12T09:59:55.147 回答