Lua無狀態迭代器

2021-09-19 05:28:44 字數 1415 閱讀 5036

無狀態的迭代器是指不保留任何狀態的迭代器,因此在迴圈中我們可以利用無狀態迭代器避免建立閉包花費額外的代價

每一次迭代,迭代函式呼叫狀態常量、控制變數兩個引數,乙個無狀態的迭代器只利用這兩個值可以獲取下乙個元素

不囉嗦概念,看**,來理解:

--求數字j到n的平方

function square(n, j)

if j <= n

then

return j+1 , j*j -- 這裡的j+1 是為了傳給for的i值,類似++i,否則i一直不變,死迴圈

endend-- 迭代器函式、恆定狀態、控制變數的初值

for i,n in square , 3 , 1

do --這裡的i,n是square返回的

print(i-1 ,"的平方是" , n)

這裡需要注意的是,i 、 n的值是由square返回的有了上面這個例子,我們可以模仿,寫出遍歷陣列的

function iter (a, i)

local v = a[i]

if v then

return i+1, v

endendt=

-- 迭代函式,狀態常量t,控制變數初值

有了上面這個例子,我們可以輕鬆模擬ipairs

function iter (a, i)

i=i+1

local v = a[i]

if v then

return i, v

endend

function myipairs(b)

-- 迭代函式,狀態常量,控制變數初值

是不是覺得看**更容易理解概念???哈哈哈

無狀態登入

有狀態服務,即服務端需要記錄每次會話的客戶端資訊,從而識別客戶端身份,根據使用者身份進行請求的處理,典型的設計如tomcat中的session。例如登入 使用者登入後,我們把登入者的資訊儲存在服務端session中,並且給使用者乙個cookie值,記錄對應的session。然後下次請求,使用者攜帶c...

lua迭代器原理

當lua呼叫for迴圈中的ipairs a 時,它會獲得三個值 迭代器函式iter 恆定狀態a和控制變數的處置0。然後lua呼叫iter a,0 得到1,a 1 在第二次迭代中,繼續呼叫iter a,1 得到2,a 2 依次類推,直到得到的第乙個nil元素為止。pairs與ipairs類似,也是用於...

Lua 迭代器初學

和c 類似,lua也有迭代器,如汎型for。泛型for需要三個值 迭代函式 狀態常量 控制變數 乙個典型的泛型for如下 for k,v in pairs t do print k,v end 泛型for的執行過程 首先,初始化,計算 in 後面表示式的值,表示式應該返回泛型for需要的三個值 迭代...