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

これは、変数の項目としてからstartまでの数値が必要であると仮定して、必要なことを実行できます。endarray

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値になりますが、プッシュしたばかりの配列の新しい長さを返すため、その最後のステートメントの戻り値-関数の最後のものである場合は返されます。 REPLなどで上記を入力してください。-はです。[10,8,6]push[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 に答える