lua自定义迭代器

版权声明:本文为博主原创文章,转载注明出处,谢谢支持 https://blog.csdn.net/qq_32292967/article/details/78617790

自定义迭代器

#!/usr/bin/lua

tab = {
    i = 0,
    name = "Nihao",
    age = 23
}
function getName(self)
    self.i = self.i + 1
    if self.i > 2 then return nil end
    return "name", self.name
end
local meta = {__call = getName}
function iter()
    return setmetatable(tab,meta)
end
for i,v in iter() do
    print(i,v)
end
  1. for循环初始化,初始化,调用iter()方法,获取,真正的迭代方法,和状态变量(可以没有)等.
  2. iter()方法,返回了一个加工了元表的表,这个表有一个元方法,__call,当把表作为方法调用时会调用这个方法比如: table_name()
  3. for获取到真正的迭代方法后,开始调用获取第一个值,由上可知,它将调用getName方法.返回了两个值分别赋值给i,v
  4. 一直循环调用getName方法,直到返回的值为nil.

猜你喜欢

转载自blog.csdn.net/qq_32292967/article/details/78617790