2

このコードについて質問があります。

getContent: (index) ->
  content = @get('content')
  element = content.objectAt(index)
  if element?
    [type, clientId] = element
    store = @get('store')

    if clientId?
      store.findByClientId(type, clientId)

私は特にこの行について話している:

[type, clientId] = element

1つの変数から2つの値を割り当てる方法がわかりません。

上記が左側の配列に値を正常に割り当てるには、要素が配列である必要がありますか?

4

2 に答える 2

4

1つの変数から2つの値を割り当てる方法がわかりません。

CoffeeScriptは、DestructuringAssignmentと呼ばれるものを実装します。http://coffeescript.org/#destructuringで完全な説明を参照してください、しかし私はここに示すためにそれからいくつかの例を引き出しました。

簡単なリストの割り当てに使用できます。

weatherReport = (location) ->
  # Make an Ajax request to fetch the weather...
  [location, 72, "Mostly Sunny"]

[city, temp, forecast] = weatherReport "Berkeley, CA"

破壊的割り当てステートメントがコンパイルされる場所

_ref = weatherReport("Berkeley, CA"), city = _ref[0], 
temp = _ref[1], forecast = _ref[2];

上記が左側の配列に値を正常に割り当てるには、要素が配列である必要がありますか?

いいえ、オブジェクトにも使用できます。CoffeeScriptのドキュメントから「破壊的な割り当ては、配列とオブジェクトのネストの深さを問わずに使用でき、深くネストされたプロパティを引き出すのに役立ちます。」

futurists =
  sculptor: "Umberto Boccioni"
  painter:  "Vladimir Burliuk"
  poet:
    name:   "F.T. Marinetti"
    address: [
      "Via Roma 42R"
      "Bellagio, Italy 22021"
    ]

{poet: {name, address: [street, city]}} = futurists

破壊的割り当てステートメントがコンパイルされる場所

_ref = futurists.poet, 
name = _ref.name, (_ref1 = _ref.address, street = _ref1[0], city = _ref1[1]);
于 2012-08-21T05:29:08.607 に答える
0

これは構文糖衣です。つまり、次のことを意味します。

type = element[0], clientId = element[1];

また、どのコーヒースクリプトがコンパイルされているかを確認できる場所があることを知っておく必要があります:http: //coffeescript.org/(コーヒースクリプトタブを試してください)

javascriptのすべてのコーヒースクリプトコード:

getContent: function(index) {
  var clientId, content, element, store, type;
  content = this.get('content');
  element = content.objectAt(index);

  if (element != null) {
    type = element[0], clientId = element[1];
    store = this.get('store');

    if (clientId != null) {
      return store.findByClientId(type, clientId);
    }
  }
}
于 2012-08-21T05:08:12.113 に答える