Как я могу преобразовать цикл JavaScript в CoffeeScript? - PullRequest
70 голосов
/ 07 сентября 2011
for (i = 0; i < 10; i++) {

    doStuff();

}

Это код JavaScript, который я хочу преобразовать в CoffeeScript.

Ответы [ 3 ]

110 голосов
/ 07 сентября 2011
doStuff() for i in [0 .. 9]

Это объясняется на странице введения: http://coffeescript.org/#loops

Редактировать / обновить по JP:

Точный перевод:

doStuff() for i in [0...10]

Вы должны быть осторожны с ".." против "...", например:

count = 0
doStuff() for i in [0..count] #still executes once!

Так ты думаешь, нет проблем ... Я просто зациклюсь до счета-1!

count = 0
doStuff() for i in [0..count-1] #executes twice!! '0' and then '-1'

Дословный перевод:

for (var i = 0; i < someCount; ++i)
  doStuff()

есть

for i in [0...someCount]
  doStuff()   
19 голосов
/ 30 июля 2012

Отмеченный ответ является функционально правильным, но сгенерированный код не соответствует исходному javascript.
Правильный путь (читай, ближайший к следующему javascript)

for (i = 0; i < 10; i++) {
  doStuff();
}

равно doStuff() for i in [0..someCount] by 1 Обратите внимание на на 1 в цикле for.

Теперь этот код все еще создает дополнительную переменную _i. Если вы не можете жить с этим, используйте следующее:

i=0
while i<=someCount
  doStuff()
  i++
1 голос
/ 11 апреля 2018

Предыдущие ответы работают. Тем не менее, сброс i создает для меня лучше:

for [0...10]
  doStuff()

или

doStuff() for [0...10]

Другие решения добавляют дополнительную переменную итератора i для использования внутри цикла, например doStuff(i), но из http://coffeescript.org/v1/#loops:

Если вам не нужно текущее значение итерации, вы можете его опустить:

browser.closeCurrentTab() for [0...count]

Подробно, перевод for i in [0...10] - for (i = j = 0; j < 10; i = ++j), тогда как перевод for [0...10] - for (i = 0; i < 10; i++).

Обратите внимание на обсуждение в других комментариях о 2 точках против 3 точек ([0..9] против [0...10]).

...