2013-07-07 58 views
0

爲什麼coffeescript不返回對象鍵,而是將x的值視爲字符串'x'?Coffeescript正在執行列表理解對象

coffee> a = { test: '0', super: '1' } 
coffee> x for x,y of a 
[ 'test', 'super' ] 
coffee> {x:y} for x,y of a 
[ { x: '0' }, { x: '1' } ] 

回答

3

因爲這就是CoffeeScript object literal syntax的工作原理。假設它按照你想要的那樣工作。如果一個地方我說會發生什麼,這一點:

window.test = 'pancakes' 

那倒但test可變進每個人的範圍和突然你a是:

a = { 'pancakes': '0', super: '1' } 

和你會在想什麼你的電腦有點廢話。因此,如果屬性名分別爲變量,而不是報價少串評估,我們都會寫出來醜陋的東西,如:

a = { 'test': '0', 'super': '1' } 

只是爲了獲得可預見的和一致的結果。

我認爲最簡單的方法來得到你想要的是添加一個小功能是什麼:

objectify = (k, v) -> 
    o = { } 
    o[k] = v 
    o 

,那麼你可以:

a = (objectify(x, y) for x, y of o) 

演示:http://jsfiddle.net/ambiguous/M8AFk/

+0

可預見的和一致的結果在編程語言方面相當不錯。 a = {'test':'0','super':'1'}對我來說看起來不錯,因爲它避免了含糊不清。否則,coffeescript不得不做出自以爲是的猜測,在這種情況下,它猜測錯誤。感謝您的詳細解答和解決方案功能!有用! – zzart

相關問題