假设我有一个这样定义的表: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/