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 开发人员都会遇到的一件事。

恐怕这就是我们现在所拥有的一切。我能想到的唯一其他选择是:

[
  { 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'
  }
]

虽然我个人觉得浮动逗号缩进一级,看起来还不错:

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

我认为当对象字面量开始和结束时它非常明显,并且几乎不可能忘记对象字面量之间的逗号 =D

于 2012-05-24T17:08:51.337 回答
0

@Yuki Izumi 询问应该如何实施(我没有业力直接评论他的回复)。

我在coffeescript中幼稚地尝试做的是这样的:

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

这是我的两分钱

于 2014-09-21T18:02:13.623 回答