Lua程序設計 泛型for的定義

      泛型for在循環過程內部保存了迭代器函數。實際上他保存着3個值:一個迭代器函數、一個恆定狀態和一個控制變量。函數

泛型for的語法以下:
  for <var-list> in <exp-list>  do
  end
 其中,<var-list>是一個或多個變量名的列表,以逗號分隔;<exp-list>是一個或多個表達式的列表,一樣以逗號分隔。一般表達式列表只有一個元素,即一句迭代器工廠的調用。
 
 for k, v in pairs(t) do print(k, v) end
 這其中,變量列表是"k,v",表達式列表只有一個元素pairs(t)。通常來講變量列表中也只有一個變量。
 for line in io.lines() do
    io.write(line, "\n")
 end
 
 變量列表的第一個元素稱爲"控制變量"。在循環過程當中該值毫不會爲 nil,由於當他爲nil時循環就結束了。

     for 作的第一件事就是對in後面的表達式進行求值。這些表達式應該返回3個值供for保存:
             迭代器函數、恆定狀態和控制變量的初值。即只有最後一個表達式纔會產生多個結果,而且只會保留前3個值,多餘的值會被丟棄;而不足的話將以nil補足。
lua

     在初始化步驟以後,for會以恆定狀態和控制變量來調用迭代器函數。而後for將迭代器函數的返回值賦予變量列表中的變量。若是第一個返回值爲nil,那麼循環終止。不然,for執行它的循環體,隨後再次調用迭代器函數,並重復這個過程。spa

     更明確的說,如下語句:code

for var_1, .... var_n in <explist> do <block> end

    等價於:it

do 
 local _f, _s, _var = <explist>
     while true do
       local var_1, ... var_n = _f(_s, _var)
       _var = var_1
       if _var == nil then break end
       <block>
       end
 end

     所以,假設迭代器函數爲f,恆定狀態爲s,控制變量的初值爲a0。那麼在循環過程當中控制變量的值依次爲a1 = f(s, a0) ,a2 = f(s, a1),依次類推,直至ai爲nil結束循環。若是for還有其餘變量,那麼它們也會在每次調用f後得到額外的值。io

相關文章
相關標籤/搜索