基本上把Programming in Lua的18章啃下来就可以了,这部分看起来好理解,其实有点绕。
迭代器其实是一个生成器,为每次迭代提供连续的值,这就需要在连续调用之间保存一些状态(比如更新的下标值,后面会叫它控制变量),闭包可以提供这个机制。比如最简单的迭代器和其使用:
function values(t)
local i = 0
return function() i = i + 1; return t[i] end
end
iter = values(t) -- 创建迭代器
while true do
local element = iter() -- 调用迭代器
if element == nil then break end
end
这个例子其实非常简单,但我理解了好久,其实是因为这种一个函数返回了另一个函数的写法(刚接触lua不久= =)。这种叫高阶函数,就是以另一个函数为参数或返回值的函数。在函数式编程中很常见。比如求补集:
function complement(r)
return function(x, y)
return not r(x,y)
end
end
<这里r是一个有两个参数的函数,那么complement返回的也是一个有两个参数的函数,这个函数表示的就是原函数的补集。高阶函数提供了一种函数级别上的依赖注入(或反转控制)机制,其逻辑依赖于注入进来的函数的逻辑。