EDIT: A partir de CoffeeScript es compatible 1,5 by -1
sintaxis.
En primer lugar, debe familiarizarse con la palabra clave by
, que le permite especificar un paso. En segundo lugar, usted tiene que entender que el compilador CoffeeScript tiene un enfoque muy ingenuos a los puntos finales de bucle (ver issue 1187, que Blender vinculada a), lo que significa que
for some in something by -1 # don't do this!!!
dará lugar a un bucle infinito-que comienza en el índice 0 , incrementa el índice en -1 y luego espera hasta que el índice llegue al something.length
. Suspiro.
Así que hay que utilizar la sintaxis de bucle rango en lugar, que le permite especificar los criterios de valoración a sí mismo, pero también significa que tiene que agarrar los objetos de bucle a sí mismo:
for i in [something.length - 1..0] by -1
some = something[i]
Obviamente eso es bastante desordenado. Por lo tanto, debe considerar iterar más de something.reverse()
en su lugar. ¡Solo recuerda que reverse()
modifica la matriz en la que lo llamas!Si desea conservar una matriz, pero iterar sobre ella hacia atrás, debe copiarlo:
for some in something.slice(0).reverse()
Creo que ni siquiera necesita el '-1'. 'para mí en [sth.length-1..0]' funciona bien –
@RicardoTomasi Está en lo cierto de que funcionará sin el 'por -1', pero es menos eficiente: observe la salida compilada para ambos. Desde la perspectiva del compilador, 'something.length' es potencialmente negativo, por lo que el paso es potencialmente' 1' o '-1'. –
+1 para '.slice (0) .reverse()', ¡justo lo que estaba buscando! –