解释给定lua脚本中for循环语法

我需要帮助理解下面lua脚本中的 for _,v in next,keys,nil do 这一行。

在这里,我们从redis数据库中获取了一个列表,然后对它进行迭代。但是我不知道这个for循环语法是如何工作的。

local keys=redis.call('keys', 'someRegexPattern');

for _,v in next,keys,nil do
  -- 对变量v做一些事情
end

return something;

我知道_被用作占位符,以保留我们在循环中将不使用的值。但是为什么RHS中只有3个变量,而LHS中只有2个变量?

感谢您的帮助

点赞
用户7743932
用户7743932

这是 Lua 中 for 循环的通用形式。 in 右侧的三个参数分别为迭代器、状态和初始值:

for value, other variables... in iterator, state, initialValue do ... end

每次迭代都将状态和当前值(第一次迭代的初始值)传递给迭代器,它会返回下一个值,可能会带有其他迭代变量,直到返回的值为假值为止。

在您的情况下,迭代器是 next 函数。它接受一个表和一个键名,并返回表中该键的下一个键以及该键的值。如果键名是 nil,则返回表的第一个条目。

有关它是如何工作的更多技术细节,请参见 Lua 参考手册

2019-11-13 06:25:18