lua 迭代器的实现

lua迭代器的用法为:

for k, v in (i)pairs(t) do 
    print(k,v)
end

我们搞懂for...in做了什么的就明白上面代码的实现了。

其实for..in后面需要一个迭代函数,该函数可以有两个参数,一个是状态常量,一个是控制变量。例如:

local ipairsIter = function(t, i)
  i = i + 1
  local v = t[i]
  if v then
    return i, v
  end
end
for k, v in ipairsIter, {1,2,3,4}, 0
    print(k,v)
end

for..in的实现为:

do
    local _f, _s, _var = explist
    while true do
       local var_1, ... , var_n = _f(_s, _var)
       _var = var_1
       if _var == nil then break end
       block
    end
end

可以看到依次调用迭代函数,控制变量则为前一个迭代函数返回的第一个值。

lua中iparis迭代器可以用ipairsIter()迭代器函数,因为他正好是根据数字下标来索引的。那么pairs又是怎么实现的呢?

这个要用到一个内置函数,next。next作用于一个table的时候,会返回一个key,val,例如t = {a=1,b=2,c=3},next(t)=>a,1 next(t,'a') => b, 2 next(t, 'b') =>c,3可能顺序会有所不同。

参考:

https://blog.csdn.net/booirror/article/details/52514321

http://book.luaer.cn

扫描二维码关注公众号,回复: 2541094 查看本文章

猜你喜欢

转载自blog.csdn.net/zxm342698145/article/details/81129187