Подтвердить что ты не робот

Массивы литералов в Coffeescript

При создании массива литералов в JS:

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

Единственный способ, которым я могу это написать в Coffeescript:

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

Для меня это довольно уродливо, что "плавающая" запятая не очень хорошо сидит. Есть ли альтернативные синтаксисы для этого? Я знаю, что вы можете продолжать использовать подход JS-стиля из Coffeescript, но я надеялся на что-то более сжатое.

4b9b3361

Ответ 1

Это была одна вещь, с которой, кажется, сталкивается каждый разработчик CoffeeScript.

Я боюсь, что все, что у нас есть, пока. Единственная альтернатива, о которой я могу думать, это:

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

... но это далеко не идеальное.

Если кто-то хотел предложить альтернативный, сжатый и синтаксис CS-y, я был бы рад попытаться реализовать его в синтаксическом анализаторе и сделать запрос на перенос для него. Я бы хотел, чтобы это было лучше.

Ответ 2

Я не могу вспомнить, почему это работает или даже полезно для вас, но это еще одна альтернатива тому, что вы пишете.

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

Да, это работает.

Это тоже странно, похоже, работает. Я уверен, что есть простая причина для этого, но я не уверен в этом.

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

См. скомпилированный код.

Ответ 3

Чтобы избавиться от запятых внутри литералов объекта, вы можете пойти:

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

Или, если вы действительно ненавидите запятые:

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

Хотя я лично считаю, что плавающие запятые с отступом на одном уровне выглядят не так уж плохо:

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

Я думаю, что это делает его довольно очевидным, когда литералы объектов начинаются и заканчиваются, а также почти невозможно забыть запятую между объектными литералами = D

Ответ 4

@Юки Идзуми спрашивает, как это должно быть реализовано (у меня нет кармы, чтобы прокомментировать его ответ напрямую).

То, что я по-детски пытаюсь сделать в coffeescript, выглядит примерно так:

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

Это мои два цента