2012-02-16 124 views
8

有人可以告訴我如何立即在CoffeeScript中調用函數。我試圖完成類似於這個JS對象文字的東西。立即在CoffeeScript中調用函數

WEBAPP = { 
    maxHeight : function(){ 
     /* Calc stuff n' stuff */ 
     WEBAPP.maxHeight = /* Calculated value */ 
    }(), 
    someProperty : '' 
    /* ... */   
} 

是否有可能或有什麼變通方法?

回答

18

do

WEBAPP = 
    maxheight: do -> 1+1 
    someProperty: '' 

哪個編譯成

var WEBAPP; 

WEBAPP = { 
    maxheight: (function() { 
    return 1 + 1; 
    })(), 
    someProperty: '' 
}; 
+0

如果這看起來很奇怪,那麼'( - > 1 + 1)()'會和'do - > 1 + 1做同樣的事情。 – 2012-02-16 21:58:48

1

爲什麼你不會嘗試這樣的事情?

square = (x) -> x * x 

WEBAPP = { 
    maxHeight: square(3), 
    someProperty: '' 
} 

UPDATE

BTW:這是其他解決辦法

WEBAPP = { 
    maxHeight: (() -> 
     1 + 2 
    )() 
} 
2

對於任何遇到此問題的人,您還可以將do關鍵字與默認函數參數結合起來,以初始值爲遞歸「立即調用函數」播種。例如:

do recursivelyPrint = (a=0) -> 
    console.log a 
    setTimeout (-> recursivelyPrint a + 1), 1000 
相關問題