lua学习之迭代器与泛型for第一篇
迭代器与泛型 for 1 迭代器与 closure 「迭代器」是一种可以遍历一种集合中的所有元素的机制 在 lua 中通常将迭代器表示为 函数 每调用一次函数,即返回集合中的「下一个」元素 每个迭代器都需要在每次成功调用之间保存一些 状态 这样就知道 它现在所在的位置 以及 如何步进到一下位置 一个 closure 就是一种可以访问 其外部嵌套环境中的局部变量 的函数 这些变量可用于在成功调用之间保持状态值 从而使 closure 可以记住它在一次遍历中所在的位置 创建一个 closure 必须创建它的「非局部变量」 一个 closure 结构通常包含两个函数 closure 本身 创建该 closure 的工厂函数 while values 就是工厂,每次调用这个工厂,就会创建一个新的 closure 即迭代器其本身 这个 closure 将它的想要保存在其外部变量 t 和 i 中 每当调用这个迭代器时,它就从列表 t 中返回下一个值 直到最后一个元素返回后,迭代器会返回 nil ,表示迭代的结束 function values(t) local i = 0 return function () i = i + 1 return t[i] end end t = {123, 333, 444} iter = values(t) -- 创建迭代器 while true do