一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

腳本之家,腳本語言編程技術及教程分享平臺!
分類導航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務器之家 - 腳本之家 - Lua - 淺析Lua中的迭代器

淺析Lua中的迭代器

2020-05-03 12:32腳本之家 Lua

這篇文章主要介紹了Lua中的迭代器,是Lua入門學習中的基礎知識,需要的朋友可以參考下

 迭代器是一種結構,使能夠遍歷所謂的集合或容器中的元素。在Lua中,這些集合通常是指那些用于創建各種數據結構,如數組表。
一般對于迭代器

一個通用的迭代器提供的鍵值對集合中的每個元素。下面一個簡單的實例。

 

復制代碼 代碼如下:
array = {"Lua", "Tutorial"}

 

for key,value in ipairs(array)
do
   print(key, value)
end

 

當我們運行上面的代碼之后將得到下面的輸出

 

復制代碼 代碼如下:
1  Lua
2  Tutorial

 

上面的示例使用由Lua中提供的默認ipairs迭代函數。

在Lua中,我們使用函數來表示迭代器。基于這些迭代器的功能狀態保持,有兩種主要類型:

  1.     無狀態的迭代器
  2.     迭代器狀態

無狀態的迭代器

由名字本身就可以明白,這類型的迭代器功能不保留任何狀態。

現在讓我們來看看使用打印n個數的平方簡單的函數,來創建我們自己的迭代器的例子。

 

復制代碼 代碼如下:
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

 

for i,n in square,3,0
do
   print(i,n)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
1 1
2 4
3 9

 

上面的代碼可以稍微進行修改,以模仿迭代器的工作方式ipairs函數。它如下所示。

 

復制代碼 代碼如下:
function square(iteratorMaxCount,currentNumber)
   if currentNumber<iteratorMaxCount
   then
      currentNumber = currentNumber+1
   return currentNumber, currentNumber*currentNumber
   end
end

 

function squares(iteratorMaxCount)
   return square,iteratorMaxCount,0
end 

for i,n in squares(3)
do
 print(i,n)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
1 1
2 4
3 9

 

迭代器狀態

迭代使用功能不保留狀態,前面的例子。每次調用該函數時,它返回一個基于發送給函數的第二變量的集合的下一個元素。來保存當前元素的狀態,封閉物使用。關閉保留不同職能調用變量的值。要創建一個新的閉包,我們創建了兩個函數,包括封閉自己,一個工廠,創建封閉的功能。

現在讓我們看看創造我們自己的迭代中,我們將使用閉包的一個例子。

 

復制代碼 代碼如下:
array = {"Lua", "Tutorial"}

 

function elementIterator (collection)
   local index = 0
   local count = #collection
   -- The closure function is returned
   return function ()
      index = index + 1
      if index <= count
      then
         -- return the current element of the iterator
         return collection[index]
      end
   end
end

for element in elementIterator(array)
do
   print(element)
end

 

當我們運行上面的程序,會得到下面的輸出。

 

復制代碼 代碼如下:
Lua
Tutorial

 

在上面的例子中,我們可以看到,元素迭代具有另一種方法里,使用的本地外部變量索引和計數由每個函數被調用時遞增索引,返回每個集合中的元素。

我們可以創建使用閉包的函數的迭代器,如上圖所示,它可以返回多個元素,每一個我們通過收集循環時間。

延伸 · 閱讀

精彩推薦
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結合代碼實例詳細講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua簡介、編譯安裝教程及變量等語法介紹

    Lua簡介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡介、編譯安裝教程及變量等語法介紹,本文同時講解了lua注釋語法、Lua命令行方式等內容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • LuaLua教程(二):基礎知識、類型與值介紹

    Lua教程(二):基礎知識、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎知識、類型與值介紹,本文講解了Hello World程序、代碼規范、全局變量、類型與值等內容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua中table庫函數方法介紹

    Lua中table庫函數方法介紹

    這篇文章主要介紹了Lua中table庫函數方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua實現__add方法重載示例

    Lua實現__add方法重載示例

    這篇文章主要介紹了Lua實現__add方法重載示例,本文直接給出實現代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua中計算、執行字符串中Lua代碼的方法

    Lua中計算、執行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計算、執行字符串中Lua代碼的方法,類似JavaScript中eval函數的功能,在Lua中也可以實現,需要的朋友可以參考下 ...

    腳本之家6322020-04-30
  • Lua深入探究Lua中的解析表達式

    深入探究Lua中的解析表達式

    這篇文章主要介紹了深入探究Lua中的解析表達式,對于其語法部分的說明和示例都超詳細,極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監控賦值、通過table給另一個table賦值等內容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
主站蜘蛛池模板: 日本成人黄色片 | 天天操天天舔 | 亚欧美色 | 男生同性啪视频在线观看 | 亚洲 欧美 成人 | 男gay男gay男gay野外 | 国产精品久久久久久久人人看 | 狠狠涩| 性xx色3d动画xx无尽 | 久草热在线 | 日韩一区二区三区精品 | 大学第一次基本都没了 | 青青草原国产在线 | 动漫jk美女被爆羞羞漫画 | 久久成人精品免费播放 | 日本加勒比在线播放 | 美女林柏欣21p人体之仓之梦 | 天天插在线视频 | 国产专区亚洲欧美另类在线 | 美女和男生搞基 | 精品国产剧情在线观看 | 疯狂伦交1一6 小说 风间由美在线 | 日韩欧美一级大片 | 久久综久久美利坚合众国 | 猛男深夜狂cao小男生 | 美女扒开屁股让男人进去 | 农夫成人网| 久久毛片网站 | 国产福利在线观看永久视频 | 亚洲品质水蜜桃 | 亚洲精品私拍国产福利在线 | 无限资源在线观看完整版免费下载 | 久久精品WWW人人爽人人 | 乌克兰一级毛片9一18 | 日韩欧美推理片免费在线播放 | 久久精品国产在热亚洲完整版 | 我和么公的秘密小说免费 | 嫩草影院永久在线播放 | 国产精品全国探花在线观看 | 暖暖免费观看高清在线 | 四虎永久成人免费 |