2011-11-19 65 views
25

當我第一次使用CoffeeScript進行遊戲時,遇到了問題。爲了調試我的問題,我試圖從咖啡腳本網站的代碼示例位中的一個替換我的整個文件:CoffeeScript中意外的'INDENT'示例代碼

kids = 
    brother: 
    name: "Max" 
    age: 11 
    sister: 
    name: "Ida" 
    age: 9 

然而,當我嘗試編譯代碼時,我得到:

Error: In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT' 
    at Object.parseError (/usr/lib/coffeescript/parser.js:501:11) 
    at Object.parse (/usr/lib/coffeescript/parser.js:573:32) 
    at Object.compile (/usr/lib/coffeescript/coffee-script.js:23:22) 
    at /usr/lib/coffeescript/command.js:99:27 
    at /usr/lib/coffeescript/command.js:72:28 
    at fs:84:13 
    at node.js:773:9 
In coffee/main.coffee, Parse error on line 3: Unexpected 'INDENT' 

由於這是來自CoffeeScript網站的代碼,我假定代碼本身不是問題。然而,編譯器似乎也在正常工作;如果我編譯:

a = 2 

它生成一個文件:如預期

(function(){ 
    var a; 
    a = 2; 
})(); 

。所以換句話說,代碼是好的,編譯器是好的,但不知何故,我得到這個意外的'IDENT'錯誤......任何人都可以幫助我理解發生了什麼?

+0

請始終嘗試將代碼粘貼到http://coffeescript.org/#try中,以查看最新的CoffeeScript發行版中是否發生錯誤。 –

+0

我有過類似的錯誤,當我忘記上一行中的內容時,所以它並不期望代碼被縮進 –

回答

63

我很確定這是一個製表符vs空間的問題。如果是這樣,請告訴編輯不要將空格轉換爲製表符。另外,用光標瀏覽代碼並確保它不會跳過空白區域。

問題是,雖然普通編輯器看到一個標籤等同於兩個或四個空格,但coffeescript將其視爲一個空格,所以縮進會變得混亂。

如果這一切都無濟於事,請確保您有最新的咖啡豆版本,例如1.1.0或更新版本。

+2

我已經三重檢查了我的空白(使用Eclipse的顯示空白字符功能),並重新完成了它們與空間和標籤;我仍然得到相同的確切錯誤。至於有一個新的咖啡腳本,我得到了Ubuntu軟件包中的任何版本......看起來像...... 0.7.0!這可能是我的問題,讓我嘗試手動安裝咖啡,看看是否有幫助。 – machineghost

+0

這表明ubuntu的打包和更新模型在像NodeJS和CoffeeScript這樣發展如此迅速的領域存在問題。我建議從http://nodejs.org/download/安裝最新穩定的NodeJS,然後簡單地執行'npm install coffee-script'。恕我直言,使用'sudo apt-get install whatever-node-module'感覺完全錯誤; npm肯定是手頭任務的更好工具。你知道CoffeeScript 1.0.0是在2010年聖誕節發佈的嗎?那是三年前。 – flow

+0

謝謝!爲我工作! – Prostakov

4

代碼很好。確保你沒有弄亂空白(奇怪的控制字符顯示爲空白,標籤或類似)。

+1

謝謝,但我試着在Eclipse中打開空白字符,我可以看到它們實際上是空格。爲了安全起見,我嘗試刪除並替換所有的縮進,都用空格(每個縮進級別兩個)和製表符。在所有情況下,我都會得到相同的錯誤:-( – machineghost

+0

謝謝,原來它是這個版本。@ *#$ @&*#!過時的版本庫... – machineghost

+0

@machineghost:他沒有提到版本號:( – thejh

8

如果您使用的是JetBrains的IDE(的IntelliJ,PHPStorm等)爲我工作設置的變化是:

文件>設置>項目設置>代碼樣式>的CoffeeScript>標籤 和縮進

勾選「使用製表符」 &「智能標籤」

+0

我沒有理由被迫使用標籤,結果發現我的錯誤與下面的代碼被錯誤地縮進有關 – Lotus

+0

改變了措辭,以避免誤會被迫有這個設置。 – eaykin

0

如果你有同樣的問題,但你的縮進是好的,
那麼你一定會患上bug 2868

基本上,錯誤是誤導。檢查縮進
錯誤require d文件

-1

您可以通過以下兩種方式解決 1.如果使用webstorm File-> Default Settings如上所述 2。其他的解決辦法,是使用不同的編輯器一樣崇高,有ü可以按早期線路輸入,它會用空格自動標籤中,爲您

0

當原子可以自動製表符轉換爲空格:

Packages > Whitespace > Convert Tabs to Spaces