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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章