lua 高階篇 二

2022-09-15 02:36:10 字數 1586 閱讀 4691

第七章  迭代器與泛型for

迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素,在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集合的下乙個元素。

一、迭代器與閉包

乙個簡單的例子: 我們為乙個list寫乙個簡單的迭代器,與ipairs()不同的是我們實現的這個迭代器返回元素的值而不是索引下標:

function

list_iter(t)

local i = 0

local n =table.getn(t)

return

function

() i = i + 1

if i <= n then

return

t[i]

endend

endt =

iter = list_iter(t) --

cerates the iterator

while

true

dolocal element = iter() --

calls the iterator

if element == nil

then

break

endprint

(element)

end

下面看乙個稍微高階一點的例子:我們寫乙個迭代器遍歷乙個檔案內的所有匹配的單詞。為了實現目的,我們需要保留兩個值:當前行和在當前行的偏移量,我們使用兩個外部區域性變數line、pos儲存這兩個值。

function

allwords()

local line = io.read() --

current line

local pos = 1

--current position in the line

return

function () --

iterator function

while line do

--repeat while there are lines

local s, e = string.find(line,"

%w+"

,pos)

if s then

--found a word ?

pos = e + 1

--next position is after this word

return

string.sub(line,s,e) --

return the word

else

line = io.read() --

word not foud; try next line

pos = 1

--restart from first position

endend

return

nil--

no more lines: end of tr**elsal

endend

for word in allwords() do

print

(word)

end

二、範性for的語義

Lua學習高階篇

之前已經說了很多,我目前的觀點還是那樣,在嵌入式指令碼中,lua是最優秀 最高效的,如果您有不同的觀點,歡迎指正並討論,切勿吐槽。這個系列完全來自於 programming in lua 您可以將其視為本人的讀書筆記。相比而言,如果您已經掌握了lua,但仍然不是非常熟練,請相信這個系列一定會給您的查...

攻防世界 二(高階篇)

該題比較簡單,直接ida分析就可以,雖然不能出偽 但單看彙編就行 首先看到一串字串,估計進行轉碼 看到異或 嘗試python轉碼,得到flag 這幾天來比較讓我頭禿的題目,腦洞題吧,可以取巧的那種,真的頭禿還是實力不行,首先扔到ida靜態分析,看到乙個取時間的函式 所以跟時間肯定有關係,經搜尋找到關...

shell 之 gawk (二) 高階篇

一 內建變數 1 欄位和記錄分隔符變數 fieldwidths 以空格分隔的數字列表,用空格定義每個資料字段的精確寬度 fs 輸入欄位的分隔符 預設空格 rs輸入記錄的分隔符 預設換行符 ofs輸出欄位的分隔符 ors輸出記錄的分隔符 2 資料變數 argc argind argv convfmt ...