列表理解中的Coffeescript assoc数组语法

| 大家好:我经常遇到以下关于coffeescript的问题,想知道是否有人知道解决方案。考虑以下代码:
k=for x in [0...3]
   {foo:{bar:x,baz:3},qux:5}
我有很多具有这种基本布局的代码。但是,很难阅读。以下列方式编写此代码会更干净:
#Gives Error- PARSE ERROR ON LINE 5: UNEXPECTED \'TERMINATOR\'
k=for x in [0...3]
   foo:
      bar:x
      baz:3
   qux:5
可以通过以下骇客来规避此错误,该骇客看起来非常丑陋:
k=for x in [0...3]
   g=
      foo:
         bar:x
         baz:3
      qux:5
   g
有谁知道在理解内使用Coffeescript多行assoc数组语法的干净方法而不会遇到此错误?谢谢你的帮助!     
已邀请:
所以,
k=for x in [0...3]
   foo:
      bar:x
      baz:3
   qux:5
无法编译,但是
func
   foo:
      bar:x
      baz:3
   qux:5
(例如)正确编译。我相信这是CoffeeScript解析器中的一个已知错误。不幸的是,由于解析YAML样式的对象变得异常棘手,因此存在一些类似的问题。所以现在,我将使用显式花括号,如c3rin所建议的。 [编辑:具体参见问题981。]     
.map()
是您的朋友在这里:
k = [0...3].map (i) ->
    foo:
        bar: \"#{i}\"
        baz: i
    qux: i*3
(我知道您的问题实际上是一个错误,但这在IMO中更有意义。列表理解更适合于简单的任务)     
我已经改变了几次答案,但是我认为第一个示例的问题是coffeescript编译器认为foo:是您要构建的对象,并且在进入qux时会感到担忧:因为它认为它是a与foo完全不同的对象。有趣的是,您可以混合JSON样式和YAML样式的声明,使用JSON样式的花括号显式声明对象定义的边界,并在边界内部使用YAML以获得可读性。
{
  foo:
    bar:x
    baz:3
  qux:5
}
    
我通常的解决方案如下:
k = for x in [0...3]
   g =
      foo:
         bar:x
         baz:3
      qux:5
设置变量将返回其设置值。它仍然有些古怪,但是比您的版本好一点,后者在设置后显式返回
g
。不过,绝对可以解决coffeescript错误。     

要回复问题请先登录注册