2011-12-18 44 views
0

我在使用我的Rails 3.1应用程序中的CoffeeScript。但是,我不能 弄清楚如何打破的CoffeeScript排长没有得到 上述错误CoffeeScript:意外的INDENT错误

例如,如何/你在哪里会打破的代码

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的显示咖啡脚本2.2.0与咖啡脚本代码1.1.3

回答

6

如果你有一个理解太长的@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 

换句话说,理解是简短片段的语法糖 - 你不必为所有事情都使用它们。

+0

没错。 CoffeeScript的''''''while''''until',如'if' /'除非',可以使用后缀或前缀。如果加前缀,你需要使用缩进或'then'。 – 2011-12-18 18:39:24

1

我不明白的CoffeeScript语法的内部细节,所以我不能说什么详细脚麻。但是,该错误有点明确:在for及其迭代器变量之间不能放置换行符。此外,您还没有收到此错误,但尚未,但不能在迭代对象和when子句之间放置换行符。但是,如果您真的想这样做,很简单:在第一行和第二行的末尾放置反斜杠。

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

您试图将理解扩展到多行,这是不允许的。它或者需要在一条线上,或者是一个合适的循环。你的一个行版本的正常工作,所以我会告诉环路版本:

for x in [1..5] when x > 2 
    alert x 

您可能会发现它有助于在http://jashkenas.github.com/coffee-script/小东西像这样折腾到CoffeeScript的编译器,看看他们是否正在编译什么你会期望的。没问题。