Lua_利用閉合函數(shù)實(shí)現(xiàn)迭代器

c = a or b
若a為真类垦,c = a 窄俏;a為假蹂匹, c = b。
c = a and b
若a為真凹蜈,c = b限寞;a為假, c = nil

a = 10
b = 20
c = a or b
d = a and b
print(c) 
print(d)

10
20

閉合函數(shù):
一個(gè)函數(shù)包含另一個(gè)函數(shù)的調(diào)用仰坦,內(nèi)部函數(shù)使用外部函數(shù)中的變量履植,生命周期延長(zhǎng)

function func1()
    local num = 1
    return function ()  --返回函數(shù)
        num = num + 1
        return num
    end
end

local f = func1() --獲取返回的函數(shù)
local n = f()   --再調(diào)用這個(gè)函數(shù),獲取返回值
print(n)
local n = f()  --num等于上一個(gè)num直接加1
print(n)

>>2
>>3

非全局函數(shù):
存儲(chǔ)在局部變量中的函數(shù)稱為非全局函數(shù)

--非全局函數(shù):存儲(chǔ)在局部變量中的函數(shù)稱為非全局函數(shù)
local eat
local drink
eat = function( ... )
    print("吃")
    drink() --前面不聲明直接調(diào)用會(huì)報(bào)錯(cuò)悄晃,調(diào)用不到
end
drink = function()
    print("喝")
end
eat()

>>吃
>>喝

函數(shù)的尾調(diào)用:
一個(gè)函數(shù)的調(diào)用是另外一個(gè)函數(shù)的最后一個(gè)動(dòng)作玫霎,上面代碼eat方法里最后調(diào)用drink函數(shù)就是一個(gè)尾調(diào)用

-利用閉合函數(shù)是些迭代器:
function DieDai(t)
    local i = 0
    return function()
        i = i + 1
        return t[i]
    end
end

t = {'11', '22', '33', '44'}
--訪問(wèn)1
local it = DieDai(t)
while true do
    local value = it()
    if value == nil then
        break
    end
    print(value)
end
-- 訪問(wèn)2
for value in DieDai(t) do
    print(value)
end

實(shí)現(xiàn)ipair迭代器

function DieDai(t)
    local i = 0
    return function()
        i = i + 1
        if i > #t or t[i] == nil then
            return nil
        end
        return i, t[i]
    end
end
--調(diào)用
t = {"一", "二", "三"}
for k, v in DieDai(t) do
    print(k .. '\t' .. v)
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市妈橄,隨后出現(xiàn)的幾起案子庶近,更是在濱河造成了極大的恐慌,老刑警劉巖眷蚓,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鼻种,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡沙热,警方通過(guò)查閱死者的電腦和手機(jī)叉钥,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)篙贸,“玉大人投队,你說(shuō)我怎么就攤上這事∏革” “怎么了蛾洛?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我轧膘,道長(zhǎng)钞螟,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任谎碍,我火速辦了婚禮鳞滨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘蟆淀。我一直安慰自己拯啦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布熔任。 她就那樣靜靜地躺著褒链,像睡著了一般。 火紅的嫁衣襯著肌膚如雪疑苔。 梳的紋絲不亂的頭發(fā)上甫匹,一...
    開(kāi)封第一講書(shū)人閱讀 51,562評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音惦费,去河邊找鬼兵迅。 笑死,一個(gè)胖子當(dāng)著我的面吹牛薪贫,可吹牛的內(nèi)容都是我干的恍箭。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼瞧省,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼扯夭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起臀突,我...
    開(kāi)封第一講書(shū)人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤勉抓,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后候学,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體藕筋,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年梳码,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了隐圾。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡掰茶,死狀恐怖暇藏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情濒蒋,我是刑警寧澤盐碱,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布把兔,位于F島的核電站,受9級(jí)特大地震影響瓮顽,放射性物質(zhì)發(fā)生泄漏县好。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一暖混、第九天 我趴在偏房一處隱蔽的房頂上張望缕贡。 院中可真熱鬧,春花似錦拣播、人聲如沸晾咪。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)谍倦。三九已至,卻和暖如春牧嫉,著一層夾襖步出監(jiān)牢的瞬間剂跟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工酣藻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鳍置。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓辽剧,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親税产。 傳聞我的和親對(duì)象是個(gè)殘疾皇子怕轿,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容