CoffeeScript:意外的缩进错误

CoffeeScript:意外的缩进错误,coffeescript,Coffeescript,我正在Rails 3.1应用程序中试用CoffeeScript。然而,我不能 想知道如何在不获得 以上误差 例如,您将如何/在何处中断以下代码行 alert x for x in [1,2,3,4,5] when x > 2 如果你想要像这样的东西 alert x for x in [1,2,3,4,5] when x > 2 在我的vimrc中,我设置了 ts=2, sw=2 and I expand tabs. 然而,我无法让像上面这行这样简单的东西正常工作

我正在Rails 3.1应用程序中试用CoffeeScript。然而,我不能 想知道如何在不获得 以上误差

例如,您将如何/在何处中断以下代码行

alert x for x in [1,2,3,4,5]  when x > 2
如果你想要像这样的东西

alert x for
  x in [1,2,3,4,5]
  when x > 2
在我的vimrc中,我设置了

 ts=2, sw=2 and I expand tabs. 
然而,我无法让像上面这行这样简单的东西正常工作


我的Gemfile.lock显示了coffee-script-2.2.0和coffee-script源代码1.1.3

我不了解CoffeeScript语法的内部细节,因此我无法详细说明哪里出了问题。但是,错误有点明显:不能在for及其迭代器变量之间换行。另外,您还没有得到这个错误,但是您不能在迭代对象和when子句之间换行。然而,如果你真的想这样做,很容易:在第一行和第二行的末尾加上反斜杠

console.log x for \
    x in [1,2,3,4,5] \
    when x > 2

如果你的理解太长,你可以用@brandizzi提到的\来打破它,但我认为如果你在理解有意义的地方使用理解,并在没有意义的地方扩展到“常规”代码,你可能会有更好的运气:

alert x for x in [1,2,3,4,5]  when x > 2
…可以重写为

for x in [1,2,3,4,5]
  alert x if x > 2
……甚至

for x in [1,2,3,4,5]
  if x > 2
    alert x

换句话说,理解是简短片段的语法糖衣——你不必把它们用于所有事情。

你试图将理解扩展到多行,这是不允许的。它要么在一条线上,要么是一个适当的循环。您的单行版本按预期工作,因此我将显示循环版本:

for x in [1..5] when x > 2
  alert x
您可能会发现,将类似这样的小东西放入位于的CoffeeScript编译器中,以查看它们是否编译到了您期望的程度。

完全正确。CoffeeScript的for/while/until,比如if/除非,可以使用后缀或前缀。如果有前缀,则需要使用缩进或then。