我想在 Lua 中迭代一个表,它可以使用这样的代码(tabline_length并且tab.width之前已经设置过):
for index, tab in ipairs(tabs) do
tabline_length = tabline_length + tab.width
end
Run Code Online (Sandbox Code Playgroud)
让我(和我的编辑器)有点困扰的是,循环index中定义的变量for没有被使用。我不能tabs在不定义 的情况下迭代表吗index?我测试了以下代码,但它不起作用:
for tab in tabs do
tabline_length = tabline_length + tab.width
end
Run Code Online (Sandbox Code Playgroud)
您的第一个选择是_按照约定简单地使用未使用的变量(但请仅对局部变量执行此操作,不要使用包含_一些不会被收集的垃圾的条目污染全局变量)。
大多数 Lua linter 都认可此约定,尤其是 Luacheck。你的编辑器可能在底层使用 Luacheck。
或者,您可以实现自己的迭代器ivalues,它将迭代索引保持为“私有”,作为返回的迭代器闭包的上值:
function ivalues(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
Run Code Online (Sandbox Code Playgroud)
然后这可以用作
for tab in ivalues(tabs) do
...
end
Run Code Online (Sandbox Code Playgroud)
编写一个(很可能效率较低的)迭代器只是为了丢弃变量是愚蠢的,这就是为什么你通常会发现for _, val in ipairs(vals);但是,当您实现更多迭代器帮助器(例如mapor )时,这样的迭代器会派上用场fold;例如,给定一个sum对迭代器的元素求和的迭代器助手,您可以简单地sum(ivalues(nums))在数字表中查找数字的总和nums。用 来写ipairs会比较尴尬;您可能会重新编写命令式解决方案。
| 归档时间: |
|
| 查看次数: |
129 次 |
| 最近记录: |