Массивы литералов в Coffeescript
При создании массива литералов в JS:
[{ name: 'david', value: 'blue' }, { name: 'harold', value: 'orange' }]
Единственный способ, которым я могу это написать в Coffeescript:
[
name: 'david'
value: 'blue'
,
name: 'harold'
value: 'orange'
]
Для меня это довольно уродливо, что "плавающая" запятая не очень хорошо сидит. Есть ли альтернативные синтаксисы для этого? Я знаю, что вы можете продолжать использовать подход JS-стиля из Coffeescript, но я надеялся на что-то более сжатое.
Ответы
Ответ 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'
Это мои два цента