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