2011-12-18 63 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的編譯器,看看他們是否正在編譯什麼你會期望的。沒問題。