Recentemente stavo cercando di fare un semplice round robin con Perl, e ho trovato un comportamento che non capisco chiaramente.Round robin di base in Perl differenza tra (++/+1)
Qui il comportamento:
my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}++) % 2;
warn $a->{index};
}
L'uscita di questo codice sarà:
0,0,0,..,0
Ma se faccio lo "stesso" codice di sostituzione $ a -> {index} ++ da $ a -> {index} 1, il round robin andrà bene, ad esempio
my $a = {index => 0};
for (0 .. 10) {
$a->{index} = ($a->{index}+1) % 2;
warn $a->{index};
}
l'output sarà:
1,0,1,0,1,0,1,0...
Qualcuno può spiegarmi la differenza tra ++/+1 in questo caso? Lo trovo davvero "brutto", perché se non assegno il risultato a nessuna variabile nel caso "++" il codice funzionerà come previsto a meno che non inserisca la somma dentro().
Questo codice farà un round robin correttamente:
my $a = {index => 0};
for (0 .. 10) {
warn $a->{index}++ % 2;
}
Con() nella somma, il codice di uscita: 1,2,3,4,5,6,7,8,9
my $a = {index => 0};
for (0 .. 10) {
warn ($a->{index}++) % 2;
}
Come su: '^ =' a 'xor'. Per esempio. 'if ($ x^= 1) {...' – Sobrique
L'espressione '$ i = $ i ++' non cambierà il valore di '$ i' perché stai facendo l'assegnazione' $ i = $ i' prima del succede il dopo-incremento '++' Al contrario, l'espressione '$ i = $ i + 1' incrementerà' $ i' perché il lato destro '$ i + 1' viene valutato * prima * e viene assegnato a' $ i'. Credo che questo sia il punto cruciale dei tuoi problemi. – msw