在CoffeeScript中,我們可以做到這一點的方法:內聯重複鍵,在數組對象的值
rows = [
{a: 1}
{b: 2}
]
for row in rows
for k,v of row
alert "#{k}: #{v}"
那麼,爲什麼我們不能做這樣?:
for k,v of row for row in rows
alert "#{k}: #{v}"
在CoffeeScript中,我們可以做到這一點的方法:內聯重複鍵,在數組對象的值
rows = [
{a: 1}
{b: 2}
]
for row in rows
for k,v of row
alert "#{k}: #{v}"
那麼,爲什麼我們不能做這樣?:
for k,v of row for row in rows
alert "#{k}: #{v}"
你不能這樣做的,但你可以顛倒內循環,把表達式後的循環結構:
for row in rows
alert "#{k}: #{v}" for k,v of row
而且,作爲內環也是一種表達,也可以反轉外環以同樣的方式:d
alert "#{k}: #{v}" for k,v of row for row in rows
最相似的你想寫什麼大概是這樣的:
for row in rows then for k,v of row
alert "#{k}: #{v}"
其可以使用另一個then
進一步內聯(所述then
關鍵字通常是等效於一個新行和添加縮進的一個電平):
for row in rows then for k,v of row then alert "#{k}: #{v}"
所有這些替代的產生相同的JS代碼,所以挑選的一個或另一個不會導致性能下降或類似的情況:D
因爲該化合物語法不是Coffeescript語言的一部分。編程語言不像人類語言那麼流暢。
當您嘗試運行for k,v of row for row in rows
時,您會收到第1行的分析錯誤:意外的'FOR'。
那是因爲你把東西for row in rows
前的那一刻,它必須是一個表達和for k,v of row
是一個也沒有。你可以通過使前綴循環成爲實際表達式來驗證這一點:
row for k,v of row for row in rows
這個編譯。因此,您所使用的後綴形式用於遍歷rows
以同樣的方式,你必須與postfix內一個:
alert "#{k}: #{v}" for k,v of row for row in rows
達到你想要的分離,你需要使用then
來代替,而不是使用換行符後綴表達式:
問題不是關於「流體作爲人類語言」。 Python lambda允許我們在行內寫入更復雜的表達式。也許上面的迭代可以用CS編寫,但我不知道如何。 – mjey