for (i = 0; i < 10; i++) {
doStuff();
}
Das ist der JavaScript-Code, den ich in CoffeeScript konvertieren möchte.
for-loop
coffeescript
Shamoon
quelle
quelle
Antworten:
doStuff() for i in [0 .. 9]
Dies wird auf der Einführungsseite erläutert: http://coffeescript.org/#loops
Bearbeiten / Aktualisieren von JP:
Die genaue Übersetzung lautet:
doStuff() for i in [0...10]
Sie müssen mit dem ".." vs "..." vorsichtig sein, zum Beispiel:
count = 0 doStuff() for i in [0..count] #still executes once!
Du denkst also, kein Problem ... Ich werde nur bis Count-1 schleifen!
count = 0 doStuff() for i in [0..count-1] #executes twice!! '0' and then '-1'
Wörtliche Übersetzung von:
for (var i = 0; i < someCount; ++i) doStuff()
ist
for i in [0...someCount] doStuff()
quelle
for i in [0...10]
. Zwei Punkte (..
) bedeuten "bis zu und einschließlich", während drei Punkte (...
) "bis zu, aber nicht einschließlich" bedeuten. Es ist ein Rubinismus.Die markierte Antwort ist funktional korrekt, aber der generierte Code stimmt nicht mit dem ursprünglichen Javascript überein.
Der richtige Weg (lesen Sie den, der dem folgenden Javascript am nächsten kommt)
for (i = 0; i < 10; i++) { doStuff(); }
wird
doStuff() for i in [0..someCount] by 1
die Notiz von 1 auf dem for - Schleife.Jetzt erstellt dieser Code noch eine zusätzliche
_i
Variable. Wenn Sie nicht damit leben können, verwenden Sie Folgendes:i=0 while i<=someCount doStuff() i++
quelle
Vorherige Antworten funktionieren. Wenn Sie das jedoch fallen lassen
i
, ist es für mich besser:for [0...10] doStuff()
oder
doStuff() for [0...10]
Die anderen Lösungen fügen eine zusätzliche Iteratorvariable hinzu, die
i
Sie beispielsweise innerhalb der Schleife verwenden könnendoStuff(i)
, jedoch unter http://coffeescript.org/v1/#loops :Im Detail ist die Übersetzung von
for i in [0...10]
istfor (i = j = 0; j < 10; i = ++j)
, während die Übersetzung vonfor [0...10]
istfor (i = 0; i < 10; i++)
.Beachten Sie die Diskussion in anderen Kommentaren über 2-Punkte gegenüber 3-Punkten (
[0..9]
vs.[0...10]
).quelle