泛型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就一直进行迭代循环。