1

这似乎是一个简单的转换,但我似乎找不到它的语法。

i = start
while(if step > 0 then i < end else i > end)
  array.push i
  i += step

start、end 和 step 是有符号整数

4

2 回答 2

2

假设您希望数字 fromstartend作为array变量中的项目,这可能会满足您的需求:

array = (i for i in [start...end])
于 2012-06-01T14:52:33.610 回答
1

您应该阅读有关循环的 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);
 }`
于 2012-06-01T14:39:00.660 回答