gpt4 book ai didi

iterator - 为什么Lua的迭代器是三元组?

转载 作者:行者123 更新时间:2023-12-02 19:25:37 26 4
gpt4 key购买 nike

Lua 5.1 的引用手册指出迭代器

 for var_1, ···, var_n in explist do block end

相当于代码:

 do
local f, s, var = explist
while true do
local var_1, ···, var_n = f(s, var)
var = var_1
if var == nil then break end
block
end
end

为什么 Lua 需要“状态”变量,s

我猜这意味着迭代器函数不需要携带任何迭代器状态(例如,参见ipairs迭代器生成函数的设计),但是它相当直接按需创建携带此状态的闭包,并且每次迭代的成本几乎是一次,基于效率的情况对我来说不太清楚。

最佳答案

因为三重设计不会阻止您使用闭包,而替代方法会阻止您使用闭包。有时外部状态设计是更简单的方法。

例如,假设您正在使用 for 循环来迭代在对 RESTful 查询的响应中显示哪些页面。使用基于外部状态的循环,您可以编写一个函数,该函数基于表示查询的状态表示参数的表来迭代页面(您可以从 URL 构造一次并重用于其他几个函数)。使用三元组,您可以仅使用这些值进行迭代,而无需被迫将其(以及所有其他类似的函数)包装在闭包构造函数中。

关于iterator - 为什么Lua的迭代器是三元组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5782054/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com