假设我有一个像这样定义的表:
myTable = { myValue = nil, myOtherValue = nil}
我将如何在这样的每个时尚循环中迭代它?
for key,value in myTable do --pseudocode
value = "foobar"
end
Run Code Online (Sandbox Code Playgroud)
此外,如果它有帮助,我真的不关心关键,只关心价值.
Nic*_*las 45
没有价值的钥匙(即:是nil)不存在.myTable就Lua而言,这是一张空桌子.
您可以遍历一个空表,但这不会有用.
此外:
for key,value in myTable do --pseudocode
value = "foobar"
end
Run Code Online (Sandbox Code Playgroud)
这种"伪代码"毫无意义.您不能通过修改局部变量的内容来修改表; Lua不这样做.您无法获得对表条目的引用; 你只能从表中获得一个值.
如果要修改表的内容,则必须实际修改表.例如:
for key,value in pairs(myTable) do --actualcode
myTable[key] = "foobar"
end
Run Code Online (Sandbox Code Playgroud)
注意使用myTable.您不能在不使用表本身的情况下修改表.无论是通过访问的表myTable还是通过其他变量,您都可以存储对表的引用.
通常,在迭代表时修改表可能会导致问题.然而,Lua说:
next如果在遍历期间将任何值分配给表中不存在的字段,则行为未定义.但是,您可以修改现有字段.特别是,您可以清除现有字段.
因此,修改已存在的字段的值是完全有效的.而且key显然已经存在于表,所以你可以修改它.您甚至可以毫无问题地将其设置为nil.
Lua中的变量只不过是价值观的持有者.表包含值; myTable[key]返回一个值.您可以将该值存储在变量中,但更改变量不会更改该值myTable[key].由于表是通过引用存储的,因此您可以在一个变量中更改表的内容并在另一个变量中查看更改,但这只是表的内容,而不是表本身.