Kürzlich habe ich versucht, mit Perl ein einfaches Round Robin zu machen, und ich habe ein Verhalten gefunden, das ich nicht klar verstehe.
Hier das Verhalten:
%Vor%Die Ausgabe dieses Codes lautet:
%Vor%Aber wenn ich den "gleichen" Code tue, der $ a- & gt; {index} ++ durch $ a- & gt; {index} +1 ersetzt, ist das Round-Robin in Ordnung, Beispiel
%Vor%Die Ausgabe ist:
%Vor%Jemand kann mir den Unterschied zwischen ++ / +1 in diesem Fall erklären? Ich finde das wirklich "hässlich", denn wenn ich das Ergebnis keiner Variablen im Fall "++" zuweise, wird der Code wie erwartet funktionieren, wenn ich die Summe nicht nach innen setze ().
Dieser Code wird ein Round-Robin richtig machen:
%Vor% Mit () in der Summe gibt der Code aus: 1,2,3,4,5,6,7,8,9
$a->{index}+1
gibt $a->{index}+1
zurück, while
$a->{index}++
gibt $a->{index}
zurück, bevor es geändert wurde.
++$a->{index}
gibt $a->{index}+1
zurück, aber es macht keinen Sinn, sie in diesem Ausdruck zu verwenden, da sie $a->{index}
unnötig ändert.
$a->{index} = ($a->{index}+1) % 2;
$a->{index}
ist anfangs 0
. $a->{index}+1
gibt 1
zurück. 1 % 2
zu, was 1
zu $a->{index}
ist.
$a->{index} = $a->{index}++ % 2;
$a->{index}
ist anfangs 0
. $a->{index}++
setzt $a->{index}
auf 1
und gibt 0
(den alten Wert) zurück. 0 % 2
zu, was 0
zu $a->{index}
ist. Optionen:
%Vor%oder
%Vor%oder
%Vor%oder
%Vor%oder
%Vor% Beachten Sie, dass die letzten beiden Optionen in $a->{index}
und nicht in 0
oder 1
einen ständig steigenden Wert haben.
Beachten Sie, dass sich die beiden letzten Optionen davon unterscheiden, ob die Bedingung beim ersten Durchlauf wahr oder falsch ist.
Tags und Links perl