In Vai si può fare:Assegna-e-confronta in go-while-equivalent?
if foo := bar() ; foo != nil {
...
}
In C/C++ si può fare:
while ((foo = bar()) != NULL) {
...
}
Tuttavia, la sintassi di Go non sembra fornire alcun modo equivalente di fare assegnare-e-compare in un ciclo while; Go ha sostituito while
con una chiamata specifica di for
(ad esempio for a
equivale a for ; a ;
). Semplicemente cercando di usare la sintassi della versione if
confonde il parser, poiché si aspetta che ci sia una terza dichiarazione.
potrei solo dire:
for foo := bar() ; foo != nil ; foo = bar() {
....
}
ma in questo caso, la chiamata bar()
è abbastanza lungo, complesso, e non facile da rompere fuori nella sua funzione (anche se avrei potuto fare qualcosa di simile a dichiarare un locale func
da chiamare, ma ciò riduce ancora la chiarezza del codice).
Per ora sto facendo:
for {
foo := bar();
if foo == nil { break; }
...
}
ma questo sembra sporco, sia perché separa i criteri di loop dalla dichiarazione del ciclo stesso, e perché si basa su break
.
Quindi, c'è un modo pulito e idiomatico di eseguire un assegnamento e un confronto in un ciclo while in Go? Questo è un caso di uso comune che non riesco a immaginare che non ci sia modo di farlo.
Questo è quello che temevo. – fluffy