这似乎是一个简单的转换,但我似乎找不到它的语法。
i = start
while(if step > 0 then i < end else i > end)
array.push i
i += step
start、end 和 step 是有符号整数
这似乎是一个简单的转换,但我似乎找不到它的语法。
i = start
while(if step > 0 then i < end else i > end)
array.push i
i += step
start、end 和 step 是有符号整数
假设您希望数字 fromstart到end作为array变量中的项目,这可能会满足您的需求:
array = (i for i in [start...end])
您应该阅读有关循环的 CofeeScript 页面。但是在 CoffeeScript 中做到这一点的方法是在一个范围内迭代列表推导:
(array.push i for i in [start...end] by step)
但请注意,列表推导返回一个值。例如,给定以下代码:
start = 10
end = 5
step = -2
array = []
(array.push i for i in [start...end] by step)
正如预期的那样,该变量array以 value 结束[10,8,6],但是由于push返回它刚刚推入的数组的新长度,最后一条语句的返回值- 如果它是函数中的最后一件事,则将返回该值,或者如果您打印在 REPL 等处输入上述内容 - 是[1, 2, 3]。
编辑因此,如下所述,首先使用列表理解构造数组会更好:
array = (i for i in [start...end] by step)
在构建范围时,请注意,它...会根据正确的端点产生一个独占的范围,而..产生一个包含的范围。所以[1..5]在列表中包括 5,而[1...5]在 4 处停止。
此外,如果你真的发现自己需要 C 风格for循环的灵活性,你总是可以在 CoffeeScript 中嵌入一些文字 JavaScript,方法是用反引号 (`...`) 包装它:
`for (i=start; (step > 0 && i < end) || (step < 0 && i > end); i+=step) {
array.push(i);
}`