2014-03-12 71 views
6

我有下面的代碼(約一歲),我用它在應用程序中使用zipcode。今天我不得不改變一個價值,現在突然之間我不能再編譯它了。我在「hilleroed」的「h」處得到了一個意外的換行符。Coffeescript 1.7.1意外的換行奇怪

class Application 
    postal_codes: 
     regions: 
      sjaelland:[0..4999] 
      fyn: [5000..5999] 
      soenderjylland: [6000..6200] 
       .concat [6261..6280] 
       .concat [6600..6899] 
       .concat [6041..6064] 
       .concat [6960] 
       .concat [7000..7079] 
       .concat [7200] 
       .concat [7250] 
      nordmidtjylland: [6900..6999] 
       .concat [7080..7199] 
       .concat [7182..7184] 
       .concat [7190..7190] 
       .concat [7260..9999] 

     office_postal: 
      ringsted: 4100 
      hilleroed: 3400 
      kgslyngby: 2800 
      odense: 5220 
      haderslev: 6100 
      esbjerg: 6715 
      herning: 7400 
      aalborg: 9200 
      aarhus: 8210 
      horsens: 8700 

     offices: 
      ringsted: [0..2690] 
       .concat [2770,2791] 
       .concat [4000..4030] 
       .concat [4050..4990] 

      hilleroed: [2700..2765] 
       .concat [2980..3670] 
       .concat [4040] 

      kgslyngby: [2800..2970] 

      odense: [5000..5985] 

      haderslev: [6000..6240] 
       .concat [6300..6622] 
       .concat [6630..6640] 
       .concat [7000..7080] 
       .concat [7182..7184] 

      esbjerg: [6261..6280] 
       .concat [6623] 
       .concat [6650..6879] # 6880 is herning.. meh 
       .concat [6881..6893] 
       .concat [6960] 
       .concat [7200..7260] 

      herning: [6880] 
       .concat [6900..6950] 
       .concat [6971..6990] 
       .concat [7270..7280] 
       .concat [7330..7680] 
       .concat [7800..7884] 
       .concat [8800] 
       .concat [8831] 

      aalborg: [7700..7790] 
       .concat [7900..7990] 
       .concat [8832] 
       .concat [8970] 
       .concat [9000..9999] 

      aarhus: [8000..8270] 
       .concat [8305..8340] 
       .concat [8355..8643] 
       .concat [8660..8670] 
       .concat [8830] 
       .concat [8840..8963] 
       .concat [8981..8990] 

      horsens: [7100..7173] 
       .concat [7190] 
       .concat [7300..7323] 
       .concat [8300,8350] 
       .concat [8653..8659] 
       .concat [8680..8783] 

我不能爲了我的生活找出什麼是錯的。這是一個錯誤還是我錯過了什麼?如果我將代碼粘貼到coffeescript.org上的在線編譯器中,我會得到相同的錯誤。怎麼修?

編輯:

我正在使用coffee-script 1.7.1。它在1.6.3中工作。

UPDATE:

這是一個意外的錯誤,請參閱https://github.com/jashkenas/coffee-script/issues/3408

+0

也許你的編輯器切換了換行符,或插入了製表符而不是空格。恢復並再次嘗試,並嘗試確保沒有發生。 – asawyer

+0

當複製粘貼在這裏的東西並且可能被格式化程序清理時,很難診斷。您的編輯器是否允許您查看空白字符/行尾? – Tom

+0

試過了,沒有雪茄。如果是這樣的話,它也會失敗很多。 –

回答

2

的問題是在辦公室對象。此代碼失敗:

offices:       
    ringsted: [0..2690]    
    .concat [2770, 2791]   
    .concat [4000..4030]   
    .concat [4050..4990]   
    hilleroed: [2700..2765]   
    .concat [2980..3670]   
    .concat [4040]     
    kgslyngby: [2800..2970]   

這枚經過:

offices:                   
    ringsted: [0..2690].concat [2770, 2791].concat [4000..4030].concat [4050..4990] 
    hilleroed: [2700..2765].concat [2980..3670].concat [4040]       
    kgslyngby: [2800..2970] 

如果你真的想保持換行符,加一些括號:

offices:       
    ringsted: ([0..2690]    
    .concat [2770..2791]   
    .concat [4000..4030]   
    .concat [4050..4990])   
    hilleroed: ([2700..2765]   
    .concat [2980..3670]   
    .concat [4040])    
    kgslyngby: [2800..2970]  

看來,編譯器是迷茫關於你的對象定義結束的地方。如果你離開了括號,你會得到這個js:

// without parens 

var _i, _j, _k, _l, _results, _results1, _results2, _results3; 

({ 
    offices: { 
    ringsted: (function() { 
     _results3 = []; 
     for (_l = 0; _l <= 233; _l++){ _results3.push(_l); } 
     return _results3; 
    }).apply(this) 
    }.concat((function() { 
    _results2 = []; 
    for (_k = 2770; _k <= 2791; _k++){ _results2.push(_k); } 
    return _results2; 
    }).apply(this)).concat((function() { 
    _results1 = []; 
    for (_j = 4000; _j <= 4030; _j++){ _results1.push(_j); } 
    return _results1; 
    }).apply(this)).concat((function() { 
    _results = []; 
    for (_i = 4050; _i <= 4990; _i++){ _results.push(_i); } 
    return _results; 
    }).apply(this)) 
}); 

,當在節點REPL運行,返回:

TypeError: Object #<Object> has no method 'concat'

這是合理的基礎上,JS,但基於咖啡沒有意義。這可能值得submitting as an issue

TLDR:當你想要函數返回值分配給一個對象的字段時使用parens。

+0

plnkr必須使用舊版本的coffeescript。如果我複製粘貼你的例子中的代碼到coffeescript.org上的編輯器中,我得到錯誤。 –

+0

你有沒有試過用咖啡棉絨製成的超級棉絨?它發現大部分時間都是這樣的錯誤。 – Fresheyeball

+0

我只是試着編譯1.6.3,它的工作原理。看起來這可能是1.7.1中的一個錯誤。 –