0

coffeescript では、次のようにできます。

rows = [
    {a: 1}
    {b: 2}
]

for row in rows
    for k,v of row
        alert "#{k}: #{v}"

では、なぜこのようにできないのでしょうか?:

for k,v of row for row in rows
    alert "#{k}: #{v}"
4

3 に答える 3

4

そのようにすることはできませんが、内側のループを反転して、式の後にループ構造を配置することはできます。

for row in rows
  alert "#{k}: #{v}" for k,v of row

そして、その内側のループも式なので、同じ方法で外側のループを反転することもできます:D

alert "#{k}: #{v}" for k,v of row for row in rows

あなたが書き込もうとしていたものに最も似ているのはおそらくこれです:

for row in rows then for k,v of row 
  alert "#{k}: #{v}"

これは、別のものを使用してさらにインライン化できますthenthenキーワードは通常、改行と1つのレベルのインデントを追加することと同等です):

for row in rows then for k,v of row then alert "#{k}: #{v}"

これらの選択肢はすべて同じJSコードを生成するため、どちらかを選択しても、パフォーマンスの低下などは発生しません:D

于 2012-06-25T01:50:35.260 に答える
0

実行しようとするとfor k,v of row for row in rows行 1: Unexpected 'FOR' で Parse error が発生します

これは、 の前に何かを置いた瞬間、それはfor row in rowsでなければならず、そうではないからです。これは、接頭辞付きのループを実際の式にすることで確認できます。for k,v of row

row for k,v of row for row in rows

これはコンパイルされます。したがって、 を反復処理するために後置形式を使用したのと同じ方法でrows、内側のものを後置する必要があります。

alert "#{k}: #{v}" for k,v of row for row in rows

then必要な分離を実現するには、後置式を使用する代わりに、改行を置き換えるために使用する必要があります。

for row in rows then for k,v of row
    alert "#{k}: #{v}"
于 2012-06-25T09:20:19.250 に答える
0

その複合構文は Coffeescript 言語の一部ではないためです。プログラミング言語は、人間の言語ほど流動的ではありません。

于 2012-06-25T00:59:39.140 に答える