长沙做网站备案,成都装修网站设计,wordpress会员注册,网站登录注册页面模板迭代器是一种构造#xff0c;使您可以遍历所谓的集合或集合的元素。在Lua中#xff0c;这些集合通常引用表#xff0c;这些表用于创建各种数据结构(如数组)。
通用迭代器
通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。
array{Lua,…
迭代器是一种构造使您可以遍历所谓的集合或集合的元素。在Lua中这些集合通常引用表这些表用于创建各种数据结构(如数组)。
通用迭代器
通用的 for 迭代器提供集合中每个元素的键值对。下面给出一个简单的示例。
array{Lua, Tutorial}for key,value in ipairs(array)
doprint(key, value)
end
当无涯教程运行上面的代码时将获得以下输出-
1 Lua
2 Tutorial
上面的示例使用了Lua提供的默认 ipairs 迭代器函数。
在Lua中使用函数来表示迭代器。基于这些迭代器函数的状态维护有两种主要类型-
无状态迭代器有状态迭代器
无状态迭代器
通过名称本身可以理解这种类型的迭代器函数不保留任何状态。
现在让无涯教程看一个使用简单的函数创建自己的迭代器的示例该函数打印 n 的平方。
function square(iteratorMaxCount,currentNumber)if currentNumberiteratorMaxCountthencurrentNumbercurrentNumber1return currentNumber, currentNumber*currentNumberendendfor i,n in square,3,0
doprint(i,n)
end
当运行上面的程序时将得到以下输出。
1 1
2 4
3 9
可以稍微修改上面的代码以模仿迭代器的 ipairs 函数的工作方式。如下所示。
function square(iteratorMaxCount,currentNumber)if currentNumberiteratorMaxCountthencurrentNumbercurrentNumber1return currentNumber, currentNumber*currentNumberendendfunction 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 index0local count#collection-- The closure function is returnedreturn function ()indexindex 1if index countthen-- return the current element of the iteratorreturn collection[index]endendendfor element in elementIterator(array)
doprint(element)
end
当运行上面的程序时将得到以下输出。
Lua
Tutorial
在上面的示例中无涯教程可以看到elementIterator内部有另一个方法该方法使用局部外部变量index和count每次调用函数时通过增加索引来返回集合中的每个元素。 Lua - Iterators(迭代器) - 无涯教程网无涯教程网提供迭代器是一种构造使您可以遍历所谓的集合或集合的元素。在Lua中这些集合通常引用...https://www.learnfk.com/lua/lua-iterators.html