7.1 – Iterators and Closures
function list_iter (t)----------------------------------factory(工廠?) local i = 0 local n = table.getn(t)--------------------------回傳總元素個數 return function ()--------------------------------無名氏函式(Closure) i = i + 1 if i <= n then return t[i] end end end
t = {10, 20, 30} iter = list_iter(t) -- creates the iterator while true do local element = iter() -- calls the iterator if element == nil then break end print(element) end
1.以上會輸出10 20 30
2.LUA的陣列好像從1開始算,不像C,陣列從0開始算。
等價寫法
t = {10, 20, 30} for element in list_iter(t) do print(element) end
這裡稍微複習一下 4.3.5 – Generic for (Generic = 通用)
-- print all values of array `a'---------------------------將a陣列的值全輸出 ipairs for i,v in ipairs(a) do print(v) end
-- print all keys of table `t' for k in pairs(t) do print(k) end----------------------將a陣列的 索引 全輸出 pairs
範例:
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
revDays = {} for i,v in ipairs(days) do revDays[v] = i end
結果會是
revDays = {["Sunday"] = 1, ["Monday"] = 2,------------索引是v,值是i。for i,v in ipairs()的寫法很容易顛倒 ["Tuesday"] = 3, ["Wednesday"] = 4, ["Thursday"] = 5, ["Friday"] = 6, ["Saturday"] = 7}
? ipairs()是回傳(值,索引) ; pairs()是回傳(索引,值)
7.2 – The Semantics of the Generic for
Semantics = 語意