-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;

最初のバージョンは最後の行まで実行されます。2 番目のバージョンでは、最後の行に到達することはありません。システム全体で他に何も変更していません。私は何を間違っていますか?

アップデート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、インスタンスの 1 つが偽の値を返しています。

于 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 に答える