13

JSでリテラルの配列を作成する場合:

[{ name: 'david', value: 'blue' }, { name: 'harold', value: 'orange' }]

Coffeescriptでこれを書くことを私が見ることができる唯一の方法は:

[
  name: 'david'
  value: 'blue'
,
  name: 'harold'
  value: 'orange'
]

私にとって、これはかなり醜いです、その「フローティング」コンマは本当にうまく座りません。これに代わる構文はありますか?Coffeescript内からJSスタイルのアプローチを引き続き使用できることは承知していますが、もっと簡潔なものを望んでいました。

4

4 に答える 4

14

なぜこれが機能するのか、あるいはそれがあなたにとって有用であるとしても、私は思い出せませんが、それはあなたが書いているコードの別の代替手段です。

[
  {}= name: 'david', value: 'blue'
  {}= name: 'harold', value: 'orange'
]

はい、これはうまくいくようです。

これも奇妙に機能しているようです。簡単な理由があると思いますが、よくわかりません。

[
  {}= 
    name: 'david'
    value: 'blue'
  {}= 
    name: 'harold'
    value: 'orange'
  {}= 
    name: 'david'
    value: 'blue'
]

コンパイルされたコードを参照してください。

于 2012-05-24T16:40:24.910 に答える
11

これは、すべてのCoffeeScript開発者が遭遇しているように思われることの1つです。

今のところ、これですべてです。私が考えることができる他の唯一の選択肢は次のとおりです。

[
  { name: 'david', value: 'blue' }
  { name: 'harold', value: 'orange' }
]

…しかし、それ自体は理想からはほど遠いです。

誰かが代替の簡潔でCS-y構文を提案したい場合は、パーサーに実装してプルリクエストを作成してみてください。これよりもっといいものが欲しいです。

于 2012-05-24T13:26:43.013 に答える
8

オブジェクトリテラル内のコンマを取り除くには、次のようにします。

[
  {
    name: 'david'
    value: 'blue'
  }, {
    name: 'harold'
    value: 'orange'
  }, {
    name: 'david'
    value: 'blue'
  }
]

または、カンマが本当に嫌いな場合:

[
  {
    name: 'david'
    value: 'blue'
  }
  {
    name: 'harold'
    value: 'orange'
  }
  {
    name: 'david'
    value: 'blue'
  }
]

個人的には、1レベルインデントされたフローティングコンマは、それほど悪くはないように見えます。

[
    name: 'david'
    value: 'blue'
  , 
    name: 'harold'
    value: 'orange'
  , 
    name: 'david'
    value: 'blue'
]

オブジェクトリテラルがいつ開始および終了するかが非常に明確になり、オブジェクトリテラル=D間のコンマを忘れることがほぼ不可能になると思います。

于 2012-05-24T17:08:51.337 に答える
0

@Yuki Izumiは、これをどのように実装する必要があるかを尋ねます(彼の返信に直接コメントするカルマはありません)。

私が幼稚にコーヒースクリプトでやろうとしていることは、次のようなものです。

arrayOfLiterals =
  'somekey': 'someval'
  'otherkey': 'otherval'
     'keyInOtherArrayElement': 'andItsVal'
     'yetMoreInSecondElement': 'andItsVal'
  'thirdElement': 'val'
     'fourthElement': 'val'

これは私の2セントです

于 2014-09-21T18:02:13.623 に答える