【发布时间】:2011-11-12 08:01:38
【问题描述】:
for (i = 0; i < 10; i++) {
doStuff();
}
这是我要转换为 CoffeeScript 的 JavaScript 代码。
【问题讨论】:
-
也试试js2.coffee
标签: for-loop coffeescript
for (i = 0; i < 10; i++) {
doStuff();
}
这是我要转换为 CoffeeScript 的 JavaScript 代码。
【问题讨论】:
标签: for-loop coffeescript
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!
所以你认为,没问题...我会一直循环直到 count-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()
【讨论】:
for i in [0...10]。两个点 (..) 表示“最多但不包括”,而三个点 (...) 表示“最多但不包括”。这是一种 Ruby 主义。
标记的答案在功能上是正确的,但生成的代码与原始 javascript 不匹配。
正确的方式(阅读,最接近以下 javascript 的方式)
for (i = 0; i < 10; i++) {
doStuff();
}
是doStuff() for i in [0..someCount] by 1
注意 for 循环中的 by 1。
现在这段代码,仍然创建了一个额外的_i 变量。如果您无法忍受,请使用以下内容:
i=0
while i<=someCount
doStuff()
i++
【讨论】:
以前的答案有效。但是,删除 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++)。
请注意其他 cmets 中关于 2 点与 3 点的讨论([0..9] 与 [0...10])。
【讨论】: