lua - "For each"在带有键值对的 lua 表中循环

标签 lua lua-5.2

假设我有一个这样定义的表:
myTable = { myValue = nil, myOtherValue = nil}
我将如何在像这样的每个时尚循环中迭代它?

  for key,value in myTable do --pseudocode
        value = "foobar"
  end

另外,如果它有帮助,我并不真正关心键,只关心值。

最佳答案

没有值(value)的键(即:是 nil )不存在。 myTable就 Lua 而言,它是一个空表。

您可以遍历一个空表,但这不会有用。

此外:

for key,value in myTable do --pseudocode
    value = "foobar"
end

这个“伪代码”是没有意义的。您不能通过修改局部变量的内容来修改表; Lua 不是这样工作的。您无法获得对表条目的引用;您只能从表中获取一个值。

如果要修改表的内容,则必须实际修改表。例如:
for key,value in pairs(myTable) do --actualcode
    myTable[key] = "foobar"
end

注意myTable的使用.在某些时候,如果不使用表本身,就无法修改表。是否是通过 myTable 访问的表或者通过一些其他变量存储对表的引用。

通常,在迭代表时修改表可能会导致问题。但是,Lua 说:

The behavior of next is undefined if, during the traversal, you assign any value to a non-existent field in the table. You may however modify existing fields. In particular, you may clear existing fields.



所以修改一个已经存在的字段的值是完全有效的。和 key显然表中已经存在,所以你可以修改它。您甚至可以将其设置为 nil没有问题。

Lua 中的变量只不过是值的持有者。表格包含值; myTable[key]返回一个值。您可以将该值存储在变量中,但更改该变量不会更改 myTable[key] 的值。 .由于表是通过引用存储的,您可以更改一个变量中的表内容并查看另一个变量中的更改,但这只是表的内容,而不是表本身。

关于lua - "For each"在带有键值对的 lua 表中循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13081620/

相关文章:

c++ - 在从 Lua 调用的 C++ 中,lua_type(L,0) 返回未记录的 9

io - lua 阶乘,io.read 读取数字

lua - 是否有任何 Lua 库使用 UTF8 编码将字符串转换为字节?

nil 类型的 Lua 条件

c++ - 无法获取 Lua 函数来引用 'self'

windows - 在 Windows 中构建 Lua 5.2.2

linux - 如何在 Nginx 配置中使用操作系统环境变量?

c++ - 如何在用户数据中存储值类型?

lua - 加载文件并返回其环境

lua - lua __pairs 的实际实现是什么?