3

CoffeeScriptと2次元配列で何かが足りないような気がします。私は単にスペースのグリッドを作成しようとしています(チェッカーを考えてください)。array.map関数を使用して検索と検出を行った後、次のことを思いつきました。

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space()

そして、これはうまく機能しているようです。それぞれにSpaceオブジェクトが作成された素晴らしい2次元配列があります。しかし、ここで、作成したスペースコンストラクターにx、yの場所を送信します。私は2層の深さなのでx、のマップ関数に入ったときに変数を失いましたy

理想的には、次のようなことをしたいと思います。

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space(x, y)

または私にとってより自然に感じる何か:

for row in rows
  for column in row
    @spaces[row][column] = new Elements.Space(row, column)

私はこれを行うためのより良い方法を本当に受け入れています。標準のJavaScriptでそれを行う方法は知っていますが、CoffeeScriptでそれを行う方法を本当に学びたいと思っています。

4

1 に答える 1

7

での最初の試みmapは、それを行うための有効な方法です。xクロージャなので、実際に失うことはありません。したがって、2番目のコードブロックには何も問題はありません。

@spaces = [0...20].map (x)->
  [0...20].map (y) ->
    new Elements.Space(x, y)

これのforループバージョンも非常に単純です。

@spaces = for x in [0...20]
  for y in [0...20]
    new Elements.Space(x, y)

すべてが表現であることを忘れないでください。したがって、これは機能します(バージョンよりも少し明確になる可能性がありますmap)。

于 2012-09-27T03:36:35.247 に答える