LUA学习笔记--泛型for进行迭代处理的细节

泛型for的文法:

for <var-list> in <exp-list>  do

     <body>

end


var-list: 迭代变量列表,可以有多个变量,其中第一个变量固定为迭代变量,如果这个变量为nil,则退出for。var-list的值由"迭代函数"返回,迭代函数是如何获取到以及在何时被调用会在后面有描述。

exp-list: 表达式列表,表达式列表可以有多个表达式组成(至少一个,废话),在进入泛型for()时exp-list被调用一次且只有这一次。

 泛型for的调用流程如下:

Step1: 调用exp-list,由exp-list中的第一个表达式返回3个数值:  迭代函数IterFunc,状态常量StateConst,控制变量ControlVar

Step2: 根据Step1获取的结果,调用: IterFunc(StateConst, ControlVar), 调用的结果被按顺序赋值给 var-list 中的变量,超出的

           抛弃,不足的补nil。 

Step3: 首先令ControlVar等于IterFunc()的第一个返回值。如果Step2中IterFunc()返回值的第一个是nil,则不进入<body>直接跳出for,否则            进入<body>。

Step4: jump to Step2

基本的流程就是这样,泛型for的重点就在于,var-list和exp-list之外还有3个隐含的变量:迭代函数IterFunc, 状态常量StateConst, 控制变量ControlVar。这3个变量由exp-list的第一个表达式返回。 并且每次都令var-list = ControlVar = IterFunc(StateConst, ControlVar) (超过忽略,不足补nil),只要ControlVar不为nil就一直进行迭代循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值