1:使用闭包创建迭代器
2:泛型for保存状态变量和控制变量,将状态变量传入迭代器,进行迭代,这个属于无状态迭代器例子:ipairs
3:将状态变量设置成为table,然后利用table里面的值进行保存状态,进行迭代,这个属于多状态迭代器
4:协同程序创建迭代器
5:无状态迭代器优于闭包迭代器优于多状态迭代器.
以上迭代器,都需要for或者while调用(迭代器的名字有一些误导,因为它并没有迭代,完成迭代功能的是 for 语句,也许应该叫'生成器';)
__index调用时机是当在获取(get时)原始表中没有此域(属性,方法,字段等)则去__index对应的表中寻找,或者调用__index返回一个值
__newindex调用时机是赋值(set时)原始表中没有此域(属性,方法,字段等)则去__newindex对应的方法中或者表中