array = {"Lua", "Tutorial"}function elementIterator (collection)local index = 0local count = #collection-- 閉包函數(shù)return function ()index = index + 1if index <= countthen-- 返回迭代器的當(dāng)前元素return collection[index]endendendfor element in elementIterator(array)doprint(element)end我比較不理解的就是:迭代函數(shù)elementIterator閉包返回了一個(gè)匿名函數(shù),被賦到了element上,按理來說element應(yīng)該是個(gè)函數(shù),為什么這里直接輸出函數(shù)本身就執(zhí)行了,不是應(yīng)該加個(gè)括號(hào)才執(zhí)行嗎?
2 回答

慕仙森
TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
應(yīng)該是屬于符合手冊規(guī)定的迭代器寫法
這里elementIterator是迭代工廠,相當(dāng)于一個(gè)提供狀態(tài)的對象
返回的function()閉包是才是迭代器,返回每個(gè)值
而for或while直接在使用迭代器返回每個(gè)值,所以element不會(huì)等同于迭代器函數(shù)而是各個(gè)值..
- 2 回答
- 0 關(guān)注
- 809 瀏覽
添加回答
舉報(bào)
0/150
提交
取消