第七章 迭代器與泛型for
迭代器是一種支援指標型別的結構,它可以遍歷集合的每乙個元素,在lua中我們常常使用函式來描述迭代器,每次呼叫該函式就返回集合的下乙個元素。
一、迭代器與閉包
乙個簡單的例子: 我們為乙個list寫乙個簡單的迭代器,與ipairs()不同的是我們實現的這個迭代器返回元素的值而不是索引下標:
functionlist_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儲存這兩個值。
functionallwords()
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
(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 ...