EDIT: Come di CoffeeScript 1,5 by -1
sintassi è supportata.
In primo luogo, è necessario acquisire familiarità con la parola chiave by
, che consente di specificare un passaggio. In secondo luogo, si deve capire che il compilatore CoffeeScript adotta un approccio molto ingenuo endpoint di loop (vedi issue 1187, che Blender legato a), il che significa che
for some in something by -1 # don't do this!!!
si tradurrà in un infinito loop-inizia in corrispondenza dell'indice 0 , incrementa l'indice di -1 e quindi attende finché l'indice non raggiunge something.length
. Sospiro.
quindi è necessario utilizzare la sintassi di loop, invece, che consente di specificare i punti finali da soli, ma significa anche che devi afferrare gli oggetti di loop da soli:
for i in [something.length - 1..0] by -1
some = something[i]
Ovviamente questo è piuttosto disordinato. Quindi dovresti prendere in considerazione la possibilità di iterare su something.reverse()
. Ricorda che lo reverse()
modifica l'array su cui lo chiami!Se si desidera conservare una matrice, ma scorrere su di esso al contrario, si dovrebbe copiarlo:
for some in something.slice(0).reverse()
fonte
2011-10-27 19:06:20
Penso che non sia nemmeno necessario il '-1'. 'per i in [sth.length-1..0]' funziona bene –
@RicardoTomasi Hai ragione che funzionerà senza 'by -1', ma è meno efficiente - guarda l'output compilato per entrambi. Dal punto di vista del compilatore, 'something.length' è potenzialmente negativo, quindi il passaggio è potenzialmente' 1' o '-1'. –
+1 per '.slice (0) .reverse()', proprio quello che stavo cercando! –