这似乎是一个简单的转换,但我似乎找不到它的语法。
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);
}`