如何將此循環轉換爲咖啡腳本?與操作循環的咖啡腳本
for (var j = world.m_jointList; j; j = j.m_next) {
drawJoint(j, context);
}
如何將此循環轉換爲咖啡腳本?與操作循環的咖啡腳本
for (var j = world.m_jointList; j; j = j.m_next) {
drawJoint(j, context);
}
while j = (unless j? then first else j.next)
do stuff
但是總體來說,有什麼錯誤只是初始化代碼編寫for
循環作爲一個單獨的語句,例如j=first; while j then ...; j=j.next
?
編輯: 或者可能:
while j = j?.next ? first
do stuff
這應該是公認的答案!我將它用於Box2D [聯合列表](http://kyucon.com/doc/box2d/Box2D/Dynamics/b2World。html#GetJointList()) – Jankeesvw 2012-09-20 06:48:11
發生了什麼事在原:
JavaScript有compound for loops。括號內的聲明有三個表達式:for(x; y; z){...}
。環路
y
前一次
x
運行是這樣的條件,在每次迭代之前進行測試。如果是假的循環將每次迭代在此代碼後立即停止
z
運行,設置j = world.m_jointList
,這是在鏈表中的第一項。 for
循環的中間部分正在檢查thruthiness的j;
,並且在每次迭代j
設置爲j.m_next
後,這是指向鏈中下一個對象的指針。它在j
評估爲false時結束(在這種情況下可能爲undefined
)。 直觀地瞭解,world
看起來是這樣的:
world = {
m_jointList: {
value: 'head',
m_next: world.foo1
},
foo1: {
value: 'foo',
m_next: world.foo2
},
foo2: {
value: 'foo',
m_next: world.tail
},
tail: {
value: 'foo'
}
}
實際上在列表中的項目可能不存在爲world
性能,但這樣的工作是相同的。請注意0在最後一個對象中未定義。有時會使用尾部的佔位符值來指示鏈的末尾。
名稱m_jointList
也有點誤導這裏,因爲它實際上並不包含列表,只是它的第一個元素。
這應該做它的CoffeeScript:
j = world.m_jointList
while j then drawJoint(j, context); j = j.m_next
這會一直在javascript了良好的使用do...while
:
var j = world.m_jointList
do { drawJoint(j, context) } while (j = j.m_next)
這是最好的:
j = world.m_jointList
loop
break if not j
drawJoint j,context
j=j.m_next
它只是描述了for
循環的含義。
我會使用'while j?'而不是循環中斷語法。 – Ricket 2012-04-10 22:44:49
我不明白,即使此javascript循環不管怎麼說,能有人能解釋它,而回答CoffeeScript的一部分嗎? – 2012-02-02 01:27:18