婷婷综合国产,91蜜桃婷婷狠狠久久综合9色 ,九九九九九精品,国产综合av

主頁 > 知識庫 > Lua中的迭代器和泛型for介紹

Lua中的迭代器和泛型for介紹

熱門標簽:清朝地圖標注哈爾濱 百度地圖標注早餐區域 地圖標注大廈 漳州智云呼電話機器人 個人怎么在地圖標注需要的店鋪 冀州市地圖標注 怎么去除地圖標注 武漢外呼防封系統多少錢 新岸線智能電銷機器人

任何一種結構,只要允許你遍歷集合中所有元素的都可稱之為迭代器。lua中常常使用函數來描述迭代器,每次調用該函數都返回集合的下一個元素。每一個迭代器都需要保存一些狀態來知道當前處于什么位置和如何進行下一次迭代。對于這樣的任務,閉包提供了很好的機制來完成。一個典型的閉包結構包含兩個函數:一個是閉包自身,一個是創建閉包的工廠。

例如,我們可以寫過簡單的list迭代器,讓他僅僅返回值。

復制代碼 代碼如下:

function values( t )
     local i = 0;
     return function() i = i + 1;return t[i] end
end

tb = {33, 44, 55}

for v in values(tb) do
     print(v)
end


泛型for簿記所有迭代循環,首先調用迭代工廠,并內部保存迭代函數。每次迭代時調用新的迭代函數。但迭代器返回nil循環結束。

上面的迭代器有個瑕疵:需要創建一個閉包。創建閉包是需要代價的,只是大部分情況下都沒問題,然而有些情況卻是不能容忍這個代價的。這時的解決方法是使用泛型for。泛型for本身保存迭代狀態,包括迭代函數,狀態常量,控制變量,因此不必付出閉包的代價,稱這種迭代器為無狀態迭代器。

泛型for的語法:

復制代碼 代碼如下:

for var-list> in exp-list> do
     body>
end

執行過程:

1.初始化迭代函數,狀態常量,控制變量,不足補nil,多出忽略。
2.狀態常量,控制變量作為參數調用迭代函數。
3.將迭代函數返回的值付給變量列表。
4.如果返回的第一個值為nil,則循環結束,否則執行循環體。
5.回到第2步。

如果遇到需要保存多個狀態,還有種方法是將所有狀態封裝到表中。實際上,我們不推薦這么寫。因為創建閉包的代價比創建表的要小,而且lua處理閉包的速度更快些。還有更強大更復雜的方式是使用協同來創建迭代器。

您可能感興趣的文章:
  • 深入解讀Lua中迭代器與泛型for的使用
  • 淺析Lua中的迭代器
  • Lua教程(五):迭代器和泛型for
  • Lua中的迭代器和泛型for學習總結
  • Lua中的迭代器和泛型for實例
  • Lua中的迭代器(iterator)淺析
  • Lua的迭代器使用中應該避免的問題和技巧
  • Lua中的for循環和迭代器的秘密探究
  • Lua中的迭代器淺析
  • Lua基礎迭代器的使用實例

標簽:宣城 臺灣 天門 天門 德宏 金昌 儋州 濰坊

巨人網絡通訊聲明:本文標題《Lua中的迭代器和泛型for介紹》,本文關鍵詞  Lua,中的,迭代,器,和,泛型,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《Lua中的迭代器和泛型for介紹》相關的同類信息!
  • 本頁收集關于Lua中的迭代器和泛型for介紹的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 凌源市| 宝山区| 阿图什市| 汨罗市| 叶城县| 凭祥市| 抚州市| 深圳市| 肃北| 逊克县| 江华| 枣庄市| 怀仁县| 壶关县| 宁海县| 武清区| 元阳县| 林州市| 班玛县| 灯塔市| 靖江市| 德惠市| 应用必备| 天门市| 香港| 玛纳斯县| 黔西县| 兰溪市| 崇文区| 金乡县| 北流市| 个旧市| 日土县| 明水县| 武宁县| 德化县| 瑞丽市| 峨山| 宝丰县| 城步| 阜新市|